我的问题从TControl开始。(8分)

  • 主题发起人 主题发起人 zw960122
  • 开始时间 开始时间
Z

zw960122

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题从TControl开始。
TC中有如下声明:
private
FOnClick: TNotifyEvent;
function IsOnClickStored: Boolean;
protected
procedure Click;
property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;
end;
function TControl.IsOnClickStored: Boolean;
begin
Result := (ActionLink = nil) or not ActionLink.IsOnExecuteLinked;
end;
procedure TControl.Click;
begin
{ Call OnClick if assigned and not equal to associated action's OnExecute.
If associated action's OnExecute assigned then call it, otherwise, call
OnClick. }
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
else if Assigned(FOnClick) then
FOnClick(Self);
end;
a基础知识:store是干什么的
我的问题:这些代码能做出点击事件的响应吗?不能,还要有什么?
TNotifyEvent的实现定义在什么地方?〔帮助中说它不是具体而微的。〕
如我建立了一个构件,它有了Onclick事件。我怎么知道事件能接收
的消息是点击而不是别的什么?Click事件不是触发Windows的消息吗 ,
没有对它的消息方面的声明,倒是有左键按下等。为什么?

 
store用于当控件的这个属性改变时,将改变后的资料保存,
这样当你下次再开这个project时,它个属性的值就是上次改变后的值,
不然它会用默认值。
 
The optional stored, default, and nodefault directives are called storage specifiers.它不影响程序的行为,而是控制Delphi维护运行时类信息(RTTI)的方法,
具体来说,storage specifier决定Delphi是否保存publishe属性的值到form(.DFM)文件
 
更详细的说明见于:
http://www.isunsoft.net/forum/link.asp?TOPIC_ID=205
 
TNotifyEvent的实现是在你写的OnClick事件中。
OnClick事件不是触发Windows的消息,而是控件收到该控件的点击消息调用Click方法。
要知道事件的消息是点击还是其它,就自己处理消息。
 
“TNotifyEvent的实现定义在什么地方?”
Classes单元中76行有如下代码:
TNotifyEvent = procedure(Sender: TObject) of object;
说明 TNotifyEvent 也是一个对象来着。
在建立控件的时候,比如建立一个FORM控件,一个FORM视窗在运行的时候会系统会有很多消息
发到这个FORM视窗,如MOUSE按一下、两下,关闭,重画等消息。
在底层这们要建立一个FORM视窗的时候都要winproc这样的个过程,
在建立视窗的时候,其函数需要一个回调函数,这个函数的作用就是,当系统有发到这个视窗的消息
的时候,系统会直接调用这个回调函数,
我们在这个函数中判断这些消息我们要不要去处理(其实几乎每个消息我们都要处理,
不然,这个视窗看起来就象死了一样)
在我们知道了系统发给我们的消息后,比如wm_mouseclick(MOUSE按下)消息。
然后我们再判断有没有给Onclick这个事件的变量赋值,如果有,则调用这个函数,
这个函数做的执行的当然就是用户写在onclick里面的代码了,
当然,如果你要搞笑,可以在收到wm_mouseclick消息后,此处调用onexit事件也是
可以的,没人管得了你。
 

看看书先,这些问题书上都有呀!
 
ForestBen,你不说话没人当你是哑巴。
 
接受答案了.
 
后退
顶部