delphi.gif (306 バイト) コールバックの使い方


Win32 APIの中でコールバックが必要なものがありますが、Delphiでは容易に実現できます。(Visual Basic4.0以前では通常、不可能でした)

コールバックを使うにはコールバック関数のポインタをAPIに渡します。次の例はSetTimerにコールバック関数(手続き)を渡して100msごとに値をカウントする例です。(Timerコンポーネントを使わずにタイマー機能を実現する例でもあります)

 

delphi1.gif (322 バイト)

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;