12.1.4 类静态方法与Windows API回调
静态类方法没有隐藏的Self参数意味着静态类方法可以作为回调函数传递给操作系统(例如,在Windows上)。实际上,您可以声明一个具有stdcall调用约定的静态类方法,并将其用作直接的Windows API回调,就像我在StaticCallBack示例中的TimerCallBack方法中所做的那样:
type
TFormCallBack = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
class var
NTimerCount: Integer;
public
procedure AddToList (const AMessage: string);
class procedure TimerCallBack(hwnd: THandle;
uMsg, idEvent, dwTime: Cardinal); static; stdcall;
end;
类数据被用作回调计数器。OnCreate处理器通过将地址传递给静态类过程来调用SetTimer API:
procedure TFormCallBack.FormCreate(Sender: TObject);
var
Callback: TFNTimerProc;
begin
NTimerCount := 0;
Callback := TFNTimerProc(@TFormCallBack.TimerCallBack);
SetTimer(Handle, TIMERID