delphi.gif (306 バイト) コールバック


Win32 API関数の中には、コールバックという種類の関数が含まれています。コールバックはWindowsから呼び出されるタイプの関数です。ここでは、ウィンドウハンドルの列挙関数を例に説明します。

 

toach.gif (917 バイト) コールバック関数の宣言

ウィンドウの列挙には、EnumWindows関数とEnumWindowProc関数を使います。このうち、EnumWindows関数は、コールバック関数EnumWindowProcをシステムに登録する関数です。コールバック関数はポインタをシステムに渡すので、必ずしもEnumWindowProcという名前である必要はありません。

コールバック関数はWin32 API関数なのでstdcall呼び出し規約でグローバル関数として宣言します。

 

toach.gif (917 バイト) コールバック関数のシステムへの登録

コールバック関数を登録するには、EnumWindows関数を使います。この関数の第1引数はポインタ型で、ここにコールバック関数EnumWindowProcのポインタを指定します。第2引数はユーザ定義のInteger型の値を設定できます。これはユーザが値を自由に決められるので、特に必要なければ0とします。

 

 サンプル

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function EnumProc(handle: Integer; Param: Integer): Integer; StdCall;
begin
    Form1.ListBox1.Items.Add(IntToStr(handle));
    Result := -1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
	EnumWindows(@EnumProc, 0);
end;

end.

(注意)
この例ではEnumWindowsProcコールバック関数は"EnumProc"という名前に変えています。