风
风卷残月
Unregistered / Unconfirmed
GUEST, unregistred user!
其实问题在群里面问过,昨天忽发奇想,用鼠标点击控件的事件顺序是
OnMouseDown --> OnClick --> OnMouseUp
因为最近接触了一些VCL,对Windows消息挺感兴趣, 可只知道鼠标按下与弹起消息,OnClick可没听过什么消息,后来问群里的朋友才知道是BN_CLICKED,控件消息,不是窗体消息,郁闷了.以前曾接触过一些串口通信的控件,其中有一事件为串口有数据传来,看代码才知道原来是用一定时器不斷读串口,一發現有數據就调用那个事件过程. 所以感觉,事件也是过程,只是在控件里面是被调用而已,一切智能的东西都被封装起来了.同理,事件只是VCL中的过程,那些控件里面在哪里捕获到bn_Clicked个消息然后调用 OnClick呢? 曾在TButton找到部分:
procedure TButton.CNCommand(var Message: TWMCommand);
begin
if Message.NotifyCode = BN_CLICKED then Click;
end;
也就是说收到BN_CLICKED消息就执行Click,这与自己当初的想法一样, 可后来又做一测试,从TWinControl继承一组件,然后开放他的OnClick : property OnClick; 测试了一下,组件可以响应这个消息,所以就说明TWinControl(或者TContrl)就已经响应了Click,他是如何响应的呢? 自己昨晚瞎找了一晚上都搞不定, 麻烦知道的大虾告诉下,在此拜谢.
(注:这贴 感谢以前告诉BN_CLICK的朋友,同时也感谢帮搞定TWinControl.Click的强人们
说简单一点就是Click是在何时被谁调用的,找出代码就OK! 先谢过了
OnMouseDown --> OnClick --> OnMouseUp
因为最近接触了一些VCL,对Windows消息挺感兴趣, 可只知道鼠标按下与弹起消息,OnClick可没听过什么消息,后来问群里的朋友才知道是BN_CLICKED,控件消息,不是窗体消息,郁闷了.以前曾接触过一些串口通信的控件,其中有一事件为串口有数据传来,看代码才知道原来是用一定时器不斷读串口,一發現有數據就调用那个事件过程. 所以感觉,事件也是过程,只是在控件里面是被调用而已,一切智能的东西都被封装起来了.同理,事件只是VCL中的过程,那些控件里面在哪里捕获到bn_Clicked个消息然后调用 OnClick呢? 曾在TButton找到部分:
procedure TButton.CNCommand(var Message: TWMCommand);
begin
if Message.NotifyCode = BN_CLICKED then Click;
end;
也就是说收到BN_CLICKED消息就执行Click,这与自己当初的想法一样, 可后来又做一测试,从TWinControl继承一组件,然后开放他的OnClick : property OnClick; 测试了一下,组件可以响应这个消息,所以就说明TWinControl(或者TContrl)就已经响应了Click,他是如何响应的呢? 自己昨晚瞎找了一晚上都搞不定, 麻烦知道的大虾告诉下,在此拜谢.
(注:这贴 感谢以前告诉BN_CLICK的朋友,同时也感谢帮搞定TWinControl.Click的强人们
说简单一点就是Click是在何时被谁调用的,找出代码就OK! 先谢过了