随笔分类 -  Delphi-消息研究

摘要:我在追踪执行:procedure TForm1.Button1Click(Sender: TObject);begin panel1.Left:=panel1.Left-10;end;并且屏蔽TWinControl.WMWindowPosChanged里的UpdateBounds函数后proced... 阅读全文
posted @ 2015-08-30 05:41 findumars 阅读(2212) 评论(0) 推荐(0) 编辑
摘要:刚才看这段代码的时候:procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);begin if CheckNewSize(AWidth, AHeight) and ((ALeft FLeft) or (ATop... 阅读全文
posted @ 2015-08-28 17:58 findumars 阅读(336) 评论(0) 推荐(0) 编辑
摘要:追踪CM_CONTROLCHANGE消息的流向,可以较好的测试代码:procedure TForm1.Button1Click(Sender: TObject);var Image2 : TImage;beginImage2 := TImage.Create(self);Image2.Left :... 阅读全文
posted @ 2015-08-25 19:46 findumars 阅读(321) 评论(0) 推荐(0) 编辑
摘要:VCL存在一些非API消息以供其内部使用,为什么要这样做呢?这要从WM_COMMAND & WM_NOTIFY消息说起,我们说WM_COMMAND消息并不是直接发给实际产生消息的窗体,而是发送到它的父窗体。但是父窗体几乎不可能用通常方法处理这些根本不知道如何处理的消息,于是父窗体把这个消息加上CN_... 阅读全文
posted @ 2015-08-21 20:37 findumars 阅读(467) 评论(0) 推荐(0) 编辑
摘要:要说灵活性,自然是比不上Delphi自带的覆盖WndProc,或者替换WndProc方法。unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Controls, ... 阅读全文
posted @ 2015-08-21 17:56 findumars 阅读(449) 评论(0) 推荐(0) 编辑
摘要:GetLastInputInfo是检测系统输入的,应用到某个程序中不合适!此问题有二种解法来监控输入消息:1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK2.在Application.OnMessage中做处理显然,用第2种方法比较方便!众所周知,键盘与鼠标消息都是队列消息,需... 阅读全文
posted @ 2015-08-21 17:48 findumars 阅读(1102) 评论(0) 推荐(1) 编辑
摘要:又碰到了:procedure TWinControl.WMDestroy(var Message: TWMDestroy);begin inherited; // important7 fixme 这里不是继承,也不是为了Dispatch,难道是为了调用子类覆盖函数? RemoveProp(FH... 阅读全文
posted @ 2015-08-20 05:42 findumars 阅读(202) 评论(0) 推荐(0) 编辑
摘要:在Delphi中使用Webbrowser加载百度地图时,点击了其它界面,再回到百度地图中,即使点击了鼠标,再用滚轮也不能缩 放地图,除非点地图里面的自带的控件,之后才能缩放,原因是因为其它窗体控件获得焦点后没还回给Webbrowser.目前的解决办法是在窗体上拖一个ApplicationEvents... 阅读全文
posted @ 2015-08-18 16:30 findumars 阅读(916) 评论(0) 推荐(0) 编辑
摘要:最近一段时间似乎流行源码分析:)我也来谈谈在过去一段时间里对VCL源码的分析方法方面的一点体会,本文将不探讨VCL类库的构架和设计模式方面的东本,只是以我们常见的控件属性/方法的实现过程作简单的说明,希望对初学者有所帮助。VCL分析方法例:TButton.Caption属性的由来(本文仅以此献给DE... 阅读全文
posted @ 2014-12-21 14:30 findumars 阅读(801) 评论(0) 推荐(0) 编辑
摘要:如何控制其他程序窗体上的窗口控件 用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是回调函数。我的理解是这样的:回调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等等之类的。但是什么时候被调用却不知道了。回调函数一般是按照调用者的要求定... 阅读全文
posted @ 2014-12-21 14:04 findumars 阅读(1000) 评论(0) 推荐(0) 编辑
摘要:Form1上放两个按钮Button1和Button2,默认输入焦点是Button1,现在点击Button2,产生WM_LBUTTONDOWN消息procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift... 阅读全文
posted @ 2014-11-28 05:43 findumars 阅读(1005) 评论(0) 推荐(0) 编辑
摘要:之所以要用类函数代替API,是因为VCL对它做了一些包装,好在API起作用之前和之后做一些额外的事情:通知和判断等等。之所以类函数要包装一个CM_消息,是因为这样方便程序员(在调用类函数的基础上)截断和改写这个处理过程举例:procedure TWinControl.Invalidate;begin... 阅读全文
posted @ 2014-11-17 00:08 findumars 阅读(520) 评论(0) 推荐(0) 编辑
摘要:内部控制是指,做了某些操作后产生某些效果,但是Windows系统本身不提供这样的消息,应此不得不自定义。比如父窗口改变了字体,那么所有子窗口也都应该改变字体,至少也得通知一下它们,让子控件自己决定是否响应以及怎么响应(替代了虚函数的作用,但是消息更加干净利落,愿不愿意以及怎么做完全由对方决定),但是... 阅读全文
posted @ 2014-10-13 00:42 findumars 阅读(502) 评论(0) 推荐(0) 编辑
摘要:问题的来源:在李维的《深入浅出VCL》一书中提到了点击TButton会触发WM_COMMAND消息,正是它真正执行了程序员的代码。也许是我比较笨,没有理解他说的含义。但是后来经过追踪代码和仔细分析,终于明白了整个过程。结论是,自己对Win32的不够了解,其实触发按钮就是靠这个WM_COMMAND消息 阅读全文
posted @ 2014-10-05 01:24 findumars 阅读(3175) 评论(0) 推荐(0) 编辑
摘要:SetTimer是设置定时器,每隔一段时间执行一个操作,原型如下 UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 阅读全文
posted @ 2014-09-18 21:30 findumars 阅读(4589) 评论(2) 推荐(2) 编辑
摘要:http://ymg97526.blog.163.com/blog/static/173658160201139101120862/http://ymg97526.blog.163.com/blog/static/173658160201131021911946/http://ymg97526.bl... 阅读全文
posted @ 2014-08-11 18:30 findumars 阅读(458) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/del/category/134064.html 阅读全文
posted @ 2014-07-03 00:54 findumars 阅读(485) 评论(0) 推荐(0) 编辑
摘要:起因:非Windows句柄控件也可以处理鼠标消息,我想知道是怎么处理的;并且想知道处理消息的顺序(比如TPaintBox和TForm都响应WM_Mouse消息该怎么办)界面:把TPaintBox放到TForm的最左上角,不留一点缝隙,这样可以准确发送消息给TPaintBox,然后看看它处理完以后,是 阅读全文
posted @ 2014-05-10 04:08 findumars 阅读(1549) 评论(0) 推荐(0) 编辑
摘要:DELPHI中的消息处理机制Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具。由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎(BDE),快速的代码编译器,同时又提供了众多出色的构件。受到广大编程人... 阅读全文
posted @ 2014-05-07 05:16 findumars 阅读(15120) 评论(2) 推荐(4) 编辑
摘要:好奇一下。看来Object Pascal确实与Windows深入结合了。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, St 阅读全文
posted @ 2014-05-01 19:49 findumars 阅读(669) 评论(0) 推荐(0) 编辑