†Sibylのお部屋†

【Sibyl】API関数の基本

作成開始日 2022.01.31
最終更新日 2022.02.01

Sibylでは、SPCCで可能な処理はSPCCで処理する方が賢明。システムに密着した、SPCCでは不可能な処理のみ、API関数を使うのが原則。API関数の使い方は難しくないが、指定するパラメーターは相当にややこしい。以下では、ごく簡単な例で、API関数の使い方を説明する。

その前に、情報源について少々。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/2WinQueryDesktopWindow
Win32GetDesktopWindow

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


【Sibylのお部屋目次】 【ホーム】