コールバックの使い方
Win32 APIの中でコールバックが必要なものがありますが、Delphiでは容易に実現できます。(Visual Basic4.0以前では通常、不可能でした)
コールバックを使うにはコールバック関数のポインタをAPIに渡します。次の例はSetTimerにコールバック関数(手続き)を渡して100msごとに値をカウントする例です。(Timerコンポーネントを使わずにタイマー機能を実現する例でもあります)
例
var
Form1: TForm1;
implementation
{$R *.DFM}
var
count: Integer;
{ コールバック手続き }
procedure TimerProc(hwnd: HWND; uMsg:UINT; idEvent: UINT; dwTime:DWORD);
begin
Form1.Edit1.Text := IntToStr(count);
Inc(count);
end;
{ タイマー設定と起動 }
procedure TForm1.cmdStartClick(Sender: TObject);
begin
count := 0;
{ タイマーコールバックを定義する }
SetTimer(Handle, 1, 100, @TimerProc);
end;
{ タイマー停止 }
procedure TForm1.cmdStopClick(Sender: TObject);
begin
KillTimer(Handle, 1);
end;