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;