delphi 利用TMethod 调用事件函数过程。

delphi 利用TMethod 调用事件函数过程,这里只说TNotifyEvent。

可以用TNotifyEvent 变量存起来,然后调用。但这样如果有多个的话,就麻烦,要定义很多个变量。

可以转成 TMethod,存data code就可以了。

TMethod(SaveB.OnClick).Code

TMethod(SaveB.OnClick).Data

两个可以存到stringlist 里,读取后这样调用。

可以重新把对象的onclick事件替换成新的,然后在新的事件里调用原来的

var
OrgEvent: TMethod;

OrgEvent.Code := Pointer(code);
OrgEvent.Data := Pointer(data);
TNotifyEvent(OrgEvent)(Sender);

 data如果传错的话,原本代码里如果比较简单没有用到其他对象就不会报会地址错误。如果有的话。一定要传对。

 

procedure TMyEventClass.ReSetObjNotifyEvent(AObject:TObject;OrgNotifyEvent:Pointer;NewNotifyEvent:Pointer);
var
Code,Data:Pointer;
begin

//记录原来的code data 方便其他地方可以调用
Code := TMethod(OrgNotifyEvent^).Code;
Data := TMethod(OrgNotifyEvent^).Data;
//替换成新的event
TMethod(OrgNotifyEvent^).Code := TMethod(NewNotifyEvent^).Code;
TMethod(OrgNotifyEvent^).Data := TMethod(NewNotifyEvent^).Data;
end;

posted @ 2024-04-08 11:02  Tag  阅读(30)  评论(0编辑  收藏  举报