Delphi的事件处理机制.(简单的OnClick事件处理过程)?? ( 积分: 19 )

  • 主题发起人 主题发起人 ff_ff
  • 开始时间 开始时间
F

ff_ff

Unregistered / Unconfirmed
GUEST, unregistred user!
在Tcontrols类中的private单元中定义了一个事件FOnClick: TNotifyEvent;
在protected单元中有
property OnClick:TNotifyEvent read FOnClick write OnClick;stored isOnClickStored;
procedure TControl.Click;
begin
if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute) then
FOnClick(Self)
else if not (csDesigning in ComponentState) and (ActionLink <> nil) then
ActionLink.Execute(Self)
else if Assigned(FOnClick) then
FOnClick(Self);
请问Action <> nil是用来判断什么情况的?
 
在Tcontrols类中的private单元中定义了一个事件FOnClick: TNotifyEvent;
在protected单元中有
property OnClick:TNotifyEvent read FOnClick write OnClick;stored isOnClickStored;
procedure TControl.Click;
begin
if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute) then
FOnClick(Self)
else if not (csDesigning in ComponentState) and (ActionLink <> nil) then
ActionLink.Execute(Self)
else if Assigned(FOnClick) then
FOnClick(Self);
请问Action <> nil是用来判断什么情况的?
 
看Action的声明:property Action: TBasicAction read GetAction write SetAction;
它是TBasicAction这个类的一个实例,那么Action <> nil当然是用来判断该实例是不是指向空了,即该实例是否已被释放(Free)了.
 
还是不理解,大家还有更好的解释吗?太抽象了
 
这还抽象?
你跟踪 Action 的定义 property Action: TBasicAction read GetAction write SetAction;
可以看到Action是个TBasicAction 类实例
然后跟踪TBasicAction = class(TComponent)
所以Action<>nil 就是判断这个实例是否存在啊。。。
就像判断一个button是否存在一样button<>nil
 
道理是知道,可是不知道TBasicAction是做什么用的.Action<>nil有什么实际意思?
if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute) then
FOnClick(Self)
是不是可以这样理解:事件所依附的函数指针类型的数据成员存放的就是用户在组件事件中所编写的代码的入口地址。在组件中,要执行用户为事件所编写的代码,只需要调用这个指针即可(DELPHI高手突破) 我对它理解不好,兄弟们多多讨论讨论,让兄弟我长长见识.
 
我今天也看到类Taction,想知道这个类具体是干嘛用的,关注楼主
 
对啊。。。不只是事件,类的实例里存的都是入口地址。。。。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
641
import
I
I
回复
0
查看
625
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部