delphi里的普通函数指针pointer 为4个字节,但是对象的方法指针是8个字节,由对象指针self(4字节)和函数指针(4字节)组合而成.了解了这句话,将普通的函数指针变成对象的方法指针就不是难事了.这种手段只能用于对象方法只有Sender这一个参数的情况.
下面是简单的例子代码.
1 procedure Button2Click(Sender: TObject); //这里是一个普通的函数 2 implementation 3 4 { $R *.DFM} 5 procedure Button2Click(Sender: TObject); 6 begin 7 ShowMessage('1'); 8 end; 9 10 procedure TForm1.Button1Click(Sender: TObject); 11 var 12 Method: TMethod; 13 begin 14 Method.Code := @Button2Click; //取得Button2Click函数指针 15 Method.Data := nil; //也可以是self 16 Button2.OnClick := TNotifyEvent(Method); 17 end; 18 19 //---------------------------------无敌分割线------------------------------- 20 21 TMethod = record 22 Code, Data: Pointer; 23 end;