技术文章 > 将一个vcl对象的事件指向一个普通过程或函数

将一个vcl对象的事件指向一个普通过程或函数

2019-09-18 07:06

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
//感谢DelphiBBS DFW beta兄解决参数传递问题,

C++Builder
//#include "typeinfo.h"
-------------------------------------------------
bool SetEventToProc(TObject* Sender,AnsiString eventname,void* e)
{
TMethod m;
bool bz;
/*将一个普通函数挂装到一个对象的事件句柄处理
请注意一定要在实现函数中多加一个参数,因为of object事实上有一个
隐含的self参数(下例中InTance就是为了对应self参数
*/
bz=true;
m.Code= e;
m.Data= Sender;
try
{
SetMethodProp(Sender, eventname, m);
}
catch(...)
{
bz=false;
}
return bz;
}
Delphi
--------------------------------------------------------------------
uses typinfo,....;
function SetEventToProc(Sender: TObject; eventname: string; e: Pointer):boolean;
var
m: TMethod;
begin
//将一个vcl对象的事件指向一个普通过程或函数
Result:=true;
m.Code := e;
m.Data := Sender;
try
SetMethodProp(Sender, eventname, m);
except
Result:=false
end;
end;
//测试
procedure CloseQuery(Self,Sender: TObject; var CanClose: Boolean);
begin
//Self对应对象方法的隐含参数 Self,一定要注意不要漏掉了
ShowMessage(“close“);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetEventToProc(Sender,“OnCloseQuery“,@CloseQuery);
end;