Fab*_*zio 3 delphi events compiler-errors delphi-2007
我正在尝试检查是否TNotifyEvent已经为某个特定事件分配了一个事件()procedure(Sender: TObject) of object.
这是我的示例代码:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if(Button1.OnClick = Button1Click) then
begin
//...
end;
end;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
[DCC错误] Unit1.pas(28):E2035实际参数不足
所以,我尝试过如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
if(@Button1.OnClick = @Button1Click) then
begin
//...
end;
end;
Run Code Online (Sandbox Code Playgroud)
在编译时,错误更改为:
[DCC错误] Unit1.pas(28):E2036需要变量
我如何检查是否Button1.OnClick指向Button1Click?
... of object过程/函数实现为闭包,它包含2个指针 - 隐式Self参数的指针,以及指向过程/函数本身的指针.您可以使用该TMethod记录访问这些指针以直接比较它们:
procedure TForm1.Button1Click(Sender: TObject);
var
oc1, oc2: TNotifyEvent;
begin
oc1 := Button1.OnClick;
oc2 := Button1Click;
if (TMethod(oc1).Data = TMethod(oc2).Data) and
(TMethod(oc1).Code = TMethod(oc2).Code) then
begin
//...
end;
end;
Run Code Online (Sandbox Code Playgroud)