随笔分类 - Delphi-VCL源码研究
摘要:TControl = class(TComponent) // 控件的Windows功能从TControl开始property Caption: TCaption read GetText write SetText stored IsCaptionStored; property Text:...
阅读全文
摘要:IsDelphiHandleFindVCLWindowfunction IsVCLControl(Handle: HWND): Boolean;function FindControl(Handle: HWND): TWinControl;function FindVCLWindow(const P...
阅读全文
摘要:与我研究VCL框架代码的原因一模一样:就是N年了,感觉自己还是没有掌握Delphi,惊叹别人各种各样神奇的效果,自己却不会,更不知为什么这样做,离高手的距离还有十万八千里。而且编程的时候,就像侯捷说的那样:自己只是像傻子一样地东一个按钮,西一个按钮,东编一点码,西编一点码,很愚蠢,却又不得不这样做。...
阅读全文
摘要:手工找出来,对比一下,有助于VCL框架的理解。-------------------------------------------------------------------------------------------- 才注意到,所有消息处理函数都是私有的,为什么呢?问题:其子类会继承它
阅读全文
摘要:VCL设计方法概论 1. 把Delphi对象改造成一个Windows窗口,主要是要设置Handle和回调函数。在创建一个Windows窗口后,将其句柄赋值给Delphi对象的属性,这个并不难,相当于从此以后这个Delphi控件(或称内存对象)代表了这个Windows窗口,准确的说是包含了这个Wind
阅读全文
摘要:TControl是图形控件,它本身没有句柄,所以不能直接使用WINAPI显示,调整位置,发消息等等,只能想办法间接取得想要的效果,但是可以直接使用一些不需要句柄的API,比如InvalidateRect。TWinControl是含有Windows句柄的窗口,它有句柄,因此所有使用句柄的WINAPI都
阅读全文
摘要:MainWndProc运行观察 把MainWndProc改写成如下代码,便于观察:procedure TWinControl.MainWndProc(var Message: TMessage);begin WindowProc(Message);end; 写个小程序观察汇编:procedure T
阅读全文
摘要:昨天把MakeObjectInstance的代码详细研究了一下,当然还有众多前辈高手们的帮助,终于大致搞明白了是怎么回事。但是给我顿悟的,不是高手们的帖子,而是来自我自己的一个疑惑,TObjectInstance这么小,一共才13个字节,显然不可能存储整个MainWndProc的函数内容,更不用说W...
阅读全文
摘要:高手们的文章有很大启发,但是总有些小错,也有没交代清楚的,以下是我的理解:编译器编译MainWndProc的时候,它是一个正常Delphi普通函数,MakeObjectInstance对它做变换是运行期的事情, 它有两个参数的:SELF,TMESSAGE,编译的时候仍然...
阅读全文
摘要:第一步,准备工作:预定义一个全局Win控件变量,以及一个精简化的Win控件类var CreationControl: TWinControl = nil; // 定义全局变量,用来表示每次刚创建的Win控件 TWinControl = class(TControl) private FDefWndP
阅读全文
摘要:-------------------------- TControl主要用来管理以下消息 --------------------------鼠标消息显示隐藏刷新控件状态 ControlState/ControlStyle (待续,需要详细分析)位置标题移动 Touch/Hint/Help/Dra...
阅读全文
摘要:研究VCL源码的原因和起点根本原因:当然是希望自己成为Delphi高手,因为这么多年过去,觉得自己始终不得要领,修改一个控件都无从下手,一直都只是个会拖控件的白痴。而我却拥有一颗不安分的心。郁闷原因:我把传说中的几本大作《深入浅出VCL》和《Delphi高手突破》和《Delphi开发人员指南》看了几...
阅读全文
摘要:为了深刻学习Delphi的VCL源码,要使的它立刻修改生效。网上很多办法,这招最简单最管用:把source\vcl路径添加进来,只要有修改vcl源程序,都会重新编译。但是对RTL源码不能这样做。-----------------------------------------------------...
阅读全文
摘要:理解SetCapture、ReleaseCapture、GetCapture 理解SetCapture、ReleaseCapture、GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的
阅读全文
摘要:研读深入浅出VCL一书的时候,有不少地方被网友提出疑问,而且似乎是网友们正确。但这丝毫不动摇李维在大中华Delphi界的江湖地位,因为高手应该是对整个系统理解的高手,而不是对某一个疑问的高手。能花巨量心思与精力写出如此巨著已经很不可思议,更不用说他还写了许多其它书籍、做了许多其它事情。我自己也算仔细...
阅读全文
摘要:1. 抽象类法(VCL不推荐);第一,允许创建抽象类对象,因为语法没问题,但允许其错误。第二,接口更好。第三,如果是混合抽象类,则推荐Place Holder方法2. Place Holder(占位):父类虚拟函数为空白函数,但不是抽象方法。例如TCanvas。避免了抽象类的缺点3. 逐渐增加法:子...
阅读全文
摘要:TApplication,TForm,TControl,TComponent,TWinControl研究 http://blog.csdn.net/suiyunonghen/article/details/2193247http://blog.csdn.net/lailai186/article/d
阅读全文
摘要:先扔在这里,待研究: http://blog.csdn.net/lailai186/article/details/8141170 procedure TForm1.Button1Click(Sender: TObject);begin//覆盖任务栏Self.BorderStyle := bsNon
阅读全文
摘要:TWinControl的构造函数中会调用MakeObjectInstance并且传递MainWndProc作为窗口消息处理函数,而MainWndProc则会调用虚函数WndProc来处理窗口消息。留个爪,对TButton的主要方法,都要仔细解读一下。 推测VCL控件组件大都应该重载TWinContr
阅读全文