コールバック関数(WindowsAPI)

DelphiでWindowsAPIでコールバック関数を利用する方法です。

EnumWindows APIの場合

EnumWindows APIでは引数にコールバック関数のポインタを指定する必要があります。
ここでは、関数を EnumWindowsProc とします。
Delphiでポインタを指定する場合は、対象がポインタでない場合は、対象の前に @ を付加します。
EnumWindows APIではコールバック関数のポインタを指定するので

@EnumWindowsProc

というようにします

また、コールバック関数はグローバルでなければいけません。
なので、関数の宣言はどのクラスにも属さないように行います。

EnumWindowsの例
unit Unit1;

interface
    ・
    ・
    ・
type
    TForm1 = class(TForm)
    ・
    ・
    ・
    private
    ・
    ・
    ・
    public
    ・
    ・
    ・
    end;

var
    //クラス外で宣言することでグローバルな関数になる
    EnumWindows(@EnumWindowsProc, 0);
    ・
    ・
    ・
implementation
{$R *.dfm}
    ・
    ・
    ・
//EnumWindows APIに渡すコールバック関数
function EnumWindowsProc(Wnd: hWnd; ID:LongInt):Bool; stdcall;
begin;
    ・
    ・
    ・
end;

procedure TForm1.MenuCick(Sender: TObject);
begin;
    ・
    ・
    ・
    //EnumWindows APIの呼び出し
    EnumWindows(@EnumWindowsProc, 0);
    ・
    ・
    ・
end;
といった感じです。

Windows APIと自作の関数の場合はまた違うようです。
その辺はまたやったときに書きます。