†Sibylのお部屋†
作成開始日 2022.01.31
最終更新日 2022.02.01
その前に、情報源について少々。API関数をSibyl付属のOS/2 APIリファレンスだけで理解するのは難しい。PM Programing Guid & Ref 1〜5も参照のこと(特にvol.2);こちらの方が解説が丁寧(だと思う)。ま、サンプルはCだけど。
OS/2のリファレンスだけではAPI関数の使用方法を理解するのは厳しいので、Win32 APIの情報をググったりするのだが、WindowsとAPI関数の名前が微妙に違う。まず、OS/2ではAPI関数名の頭に必ず付く「Win」が、Win32のAPI関数名にはない。また、命名規則も、OS/2では「Get」の代りに「Query」が使用されることが多い。たとえば、デスクトップのハンドルの取得関数は;
OS/2 | WinQueryDesktopWindow |
Win32 | GetDesktopWindow |
API関数の使い方は難しくはないが、引数指定が非常に面倒臭い。少しでも間違うと全く機能しないし、そもそも何を指定したら良いのかも判り難い。例えば、Formウィンドウの位置の移動等には、Formのハンドルではなく、Formの
下記の例は、Form2ウィンドウを表示して(表示自体はSPCCのメソッド)、API関数で位置とサイズを変更している。無論、これらの設定はForm2のプロパティでも変更可能だが、API関数のサンプルとして。なお、これはかなり判りやすい関数だが、WinSendMsg等は一般的過ぎて、引数指定にかなり苦労する事になる。
Uses .... PMWin, PMSHL, OS2Def; // 必要なユニットは先頭のUsesに追加のこと Var hwndFrame: HWND; // ハンドルを格納する変数 Begin Form2.Show; // まずはForm2を表示 hwndFrame:=Form2.Frame.Handle; // Form2の《フレーム》のハンドルを取得 WinSetWindowPos( hwndFrame, // FormのFrameのハンドル HWND_TOP, // 一番上に表示する 300, 200, // 位置(左下原点) 640, 480, // サイズ SWP_ACTIVATE OR SWP_MOVE OR SWP_SIZE OR SWP_SHOW // 実行する機能 ); End
人間の感覚では「AND」の方がしっくりくるが、ビット演算では、人間の「あれもこれも」は「OR」演算なんだよね。