窗口是如何管理窗口中的各种控件 的? 是不是控件上发生的所有事件都要通知所在窗口?如何通知?这什么要这样? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我看delphi处理消息时:比如按钮被按下,会发送消息给按钮所在的窗口,窗口经过一系列处理后又发送消息给按钮,按钮再调用窗口过程进行响应click事件。为什么按钮要发送消息给按钮所在的窗口? > 按钮被按下,会发送消息给按钮所在的窗口,窗口经过一系列处理后又发送消息给按钮,按钮再调用窗口过程进行响应click事件。为什么按钮要发送消息给按钮所在的窗口?描述似乎有一点不对,应该是:窗口某位置被按一下鼠标左键,发送消息给窗口,窗口经过一系列判断决定将消息发送给按钮。按钮收到消息,决定要不要处理:如果存在click事件handler,则执行click事件handler。应该是这样子吧!? 看《inside vcl》或《delphi 面向对象编程思想》 举个例子:假如Form上有个panel,panel上有个button,现在你点了一下button,WM_BUTTONDOWN会先传到form,form发现此点在panel中,便转发到panel;panel收到后,发现在button里,就再转发至button,button再按自己的逻辑处理 windows这样做的目的是什么? > windows这样做的目的是什么? > windows这样做的目的是什么?把消息传递给应该对这个消息负责或感兴趣的对象。 > 我是想:消息这样传递,拐这么多弯,应该有系统的道理。只是不知道为什么?> 是不是通知父窗口知道自己的状态?等等从windows的角度来说,因为它只认识到Form,所以它把消递传递给它。在Delphi中,Form以下的框架是Delphi开发团队设计出来的,所以由Form(包括Application)负责继续判断再传递下去。所以,它的道理就只是“把消息传递给应该对这个消息负责或感兴趣的对象”如此而已。至于你曾经说,“Button又把事件传递给Form”,你是把“消息”和“事件”的概念混淆了,Button“没有”把消息传递给Form以通知自己的状态!事件与事件处理代码,是OO编程的概念,与消息是两码子事。 按下按钮时,会向窗口发送wm_command是为什么?真不明白了 > 按下按钮时,会向窗口发送wm_command是为什么?真不明白了 > 按下按钮时,会向窗口发送wm_command是为什么?真不明白了没有 trace 代码不敢说我的回答一定对……但是考虑到我确实看过Delphi有代码在发送消息,可以试著说说看我的理解。但,我只能就我能理解的部份说说。微软用这种消息传递的机制,以解决这种面向窗口的应用会发生的这些那些的需要(点鼠标是最简单的,还有很多复杂的,之所以如此,因为要实现真正遇到的问题嘛!)Delphi接手过来,在TApplication下按著微软的消息传递机制,在自己的框架下,实现全部的功能,想也知道,一定存在复杂度和难度,原因是,真正面对的问题就是很复杂。这种由上而下的机制看似很完美,但其实是为了便于学习者了解而简化的模型,真正的模型肯定要复杂得多,这点你一定明白。比如从一个控件拖曳到另一个控件,就不是由上而下这种简化的模型能解释。因此,Delphi在实践这个机制时,突然发现按个按钮时,TForm最好也要有什么反应,最后发现这个行为和原本TForm接到一个消息时要处理的行为是一致的,那么,基于不重新发明轮子的理由,TButton就仿Windows的行为发一个消息给TForm,那也有可能。至于你问 TButton 为什么要发 Wm_Command 给 TForm,具体要TForm做什么?这个,………………………我就不知道了。待后续高手回答你。不好意思啦。 总的脉络:子控件(button)的WM_LBUTTONUP消息VCL先是将它交给操作系统处理,操作系统把这个消息又转化成它的父窗口的命令消息WM_COMMAND,TWinControl又把命令消息转化为VCL内部的消息CN_COMMAND转发给先前给它发送命令消息的子控件,最后消息在子控件类(这里为TButton)中被最终处理产生OnClick事件并结束消息的传递。 wininet的http提交 总是返回bad request 求帮助 关于数据库查询和插入的几个小问题,急等用啊!!!!!!!! 关于地图放大缩小的问题 求一十进制转成十六进制的函数据代码 请教高手帮忙,为何我的程序不能实现查询子目录?? 那个客户端与服务器间如何联? 我有2个问题? 在Delphi的代码编辑器中,怎么才能不让光标随意定位? 怎样用WATCH监视一个变量?为什么我填上变量名都不行? 我想在一个窗体里面动态的建立按钮或LABEL ,我该如何得写代码呢? 请高手质点 mscomm串口通信问题 delphi项目太大,如何根据label的text属性快速定位到源码文件
比如按钮被按下,会发送消息给按钮所在的窗口,窗口经过一系列处理后又发送消息给按钮,按钮再调用窗口过程进行响应click事件。
为什么按钮要发送消息给按钮所在的窗口?
windows这样做的目的是什么?
> 是不是通知父窗口知道自己的状态?等等从windows的角度来说,因为它只认识到Form,所以它把消递传递给它。
在Delphi中,Form以下的框架是Delphi开发团队设计出来的,所以由Form(包括Application)负责继续判断再传递下去。所以,它的道理就只是“把消息传递给应该对这个消息负责或感兴趣的对象”如此而已。至于你曾经说,“Button又把事件传递给Form”,你是把“消息”和“事件”的概念混淆了,
Button“没有”把消息传递给Form以通知自己的状态!事件与事件处理代码,是OO编程的概念,与消息是两码子事。
但是考虑到我确实看过Delphi有代码在发送消息,可以试著说说看我的理解。但,我只能就我能理解的部份说说。微软用这种消息传递的机制,以解决这种面向窗口的应用会发生的这些那些的需要(点鼠标是最简单的,还有很多复杂的,之所以如此,因为要实现真正遇到的问题嘛!)Delphi接手过来,在TApplication下按著微软的消息传递机制,在自己的框架下,实现全部的功能,
想也知道,一定存在复杂度和难度,原因是,真正面对的问题就是很复杂。这种由上而下的机制看似很完美,但其实是为了便于学习者了解而简化的模型,真正的模型肯定要复杂得多,
这点你一定明白。比如从一个控件拖曳到另一个控件,就不是由上而下这种简化的模型能解释。因此,Delphi在实践这个机制时,突然发现按个按钮时,TForm最好也要有什么反应,
最后发现这个行为和原本TForm接到一个消息时要处理的行为是一致的,
那么,基于不重新发明轮子的理由,TButton就仿Windows的行为发一个消息给TForm,
那也有可能。至于你问 TButton 为什么要发 Wm_Command 给 TForm,
具体要TForm做什么?
这个,………………………
我就不知道了。
待后续高手回答你。不好意思啦。
子控件(button)的WM_LBUTTONUP消息VCL先是将它交给操作系统处理,操作系统把这个消息又转化成它的父窗口的命令消息WM_COMMAND,TWinControl又把命令消息转化为VCL内部的消息CN_COMMAND转发给先前给它发送命令消息的子控件,最后消息在子控件类(这里为TButton)中被最终处理产生OnClick事件并结束消息的传递。