最近做一个组件Compont,需要获取控件的事件并进行处理,
在delphi中,一个控件的处理函数设置好之后,它原来的处理函数就失效了,我想实现的机制
是如C#中的事件代理一样,
一个+=就可以实现对一个事件添加多个处理函数,但delphi中并没有这样的机制,不过还是有办
法解决的:
比如我在窗体中定义了一个按钮button1,它的默认OnClick处理函数为Button1Click(Sender :
Tobject);我要为它的OnClick事件添加一个处理函数,并且不影响这个Button1Click函数的执行
。
首先,声明一个与事件类型相同的对象A。
然后,对将这个对象A赋值为原有的处理函数B
将原有的处理函数B赋值为新的处理函数C
在C函数中,使用if Assigned(A) then A(Sender);即可。
比如Button的Onclick事件,类型为TNotifyEvent,可以这样:
tmpButtonClick : TNotifyEvent;
procedure NewButtonOnClick(Sender:Tobject);
在FormShow事件中:
tmpButtonClick := Button1.OnClick;
Button1.OnClick := NewButtonOnClick;
在NewButtonOnClick中执行完所需功能之后:
if Assigned(tmpButtonClick) then
tmpButtonClick(Sender);