究竟“事件委托”是怎么实现的???(100分)

  • 主题发起人 主题发起人 honestman
  • 开始时间 开始时间
H

honestman

Unregistered / Unconfirmed
GUEST, unregistred user!
有A、B、C三个不同的函数,D要调用这三个函数。D是基本不变的,A、B、C会根据形势的发展作相应变化。现在我想这样:是否可以如果不需要就不实现A、B、C。当D判断A、B、C非NULL,才执行呢?好象控件的那些过程一样。 听说这就是事件委托。不过,具体怎么实现呢?还是搞不懂。大家是否可以举例说明啊?
 
标准的DELPHI事件委托是这样实现的:
定义一个事件类型
type TNotifyEvent = procedure (Sender: TObject) of object;

在类里声明一个事件类型的数据成员:
TMyObject = class(TObject)
private
FMyEvent : TNotifyEvent;
public
Procedure D;
Property MyEvent : TNotifyEvent read FMyEvent write FMyEvent;
end;

procedure TMyObject.D;
begin
if Assigned( FMyEvent ) then
FMyEvent( Self );
end;

只要将不同的类成员函数(可以是其它类,但必须是类成员函数,不可以是全局函数)A、B、C设置给MyEvent即可让D按情况调用。
不过A、B、C的定义必须附合事件类型的定义。
如果要用全局函数,则必须定义不同的事件类型(这种情况实际为函数指针)
type TMyGlobalEvent = Procedure;
同样在D里调用时也只要用
MyEvent;
即可,不用SELF参数
 
接受答案了.
 
后退
顶部