随笔分类 - Delphi-VCL控件创建与显示
摘要://光标在控件不同位置时的样式// 由于拐角这点手动精确实在困难 所以用范围 范围+3 这样很容易就找到这一点了procedure CtrlMouseMove(Ctrl: TWinControl; Shift: TShiftState;X, Y: Integer);begin with Ctrl...
阅读全文
摘要:The component below works perfectly, except for the following problem: 1) Saves the component below in a file "trancomp.pas".Then, install this compon
阅读全文
摘要:1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息。一个应用程序通过截获属于另一个窗口的消息,从而实现增加、监视或者修改那个窗口的缺省行为。子类化是用来改变或者扩展一个已存在的窗口的行为、而不用重新开发的有效途径。想要获得那些预定义控件窗口类(按钮控件、编辑控件、列
阅读全文
摘要:普通控件都只有一个构造函数,但是这个构造函数却强迫指定AOwner,也就是说,VCL希望将所有控件(至少是所有可视化控件)全部置于它的管理之下。至于到底显示不显示,那是另一个层次的问题。这个问题其实挺简单,但我就是希望强化一下这个概念。简单观察一下TLabel的构造函数就可以明白这一点:constr...
阅读全文
摘要:TPaintBox是一个图形控件,继承于TGraphicControl,并且只有聊聊几个函数和属性,主要就是Canvas和Paint函数,都在这里了: TPaintBox = class(TGraphicControl) private FOnPaint: TNotifyEvent; p...
阅读全文
摘要:写博客写了这么久,但是一直不知道应该怎么样写函数之间的调用关系和执行顺序,因为不停的跳来跳去的,但是写的时候却只能顺序写调用关系,直到今天发现这种写法很不错:TButton创建窗口是在CreateWnd方法开始,下面是创建的一个大概流程:TButton.CreateWnd;| TWinControl...
阅读全文
摘要:第零步,测试代码:procedure TForm1.Button1Click(Sender: TObject);begin Label1.Caption := 'Hello World';end;---------------------------------------------------...
阅读全文
摘要:var t: TBitBtn;begin t:=TBitBtn.Create(nil); t.Name:='BitBtn100'; t.parent :=Self; // 这里下断点end;一路跟踪就会发现到TWinControl.UpdateShowing函数,它发现当前控件尚未有句柄,因...
阅读全文
摘要://声明:SetWindowPos(hWnd: HWND; {窗口句柄}hWndInsertAfter: HWND; {窗口的 Z 顺序}X, Y: Integer; {位置}cx, cy: Integer; {大小}uFlags: UINT {选项}): BOOL;//hWndInsertAfte
阅读全文
摘要:TGraphicControl = class(TControl) // 这个类实在是简单,因为所有事情都已经委托给它的父Win控件了,只要管自己即可 private FCanvas: TCanvas; // 私有内部画板,不用程序员申请就有了 // 注意区别,其实图形控件没有画自己一说(但仍然接受
阅读全文
摘要:procedure TForm1.Button2Click(Sender: TObject);var l: TLabel;begin l:=TLabel.Create(self); l.Name:='label999'; l.Caption:='test label'; l.Left:=1...
阅读全文
摘要:测试,在按钮事件里写上 Button1.Repaint;(包括TWinControl.Invalidate;和procedure TWinControl.Update;两个函数,会被TButton所继承),跟踪一下就什么都明白了。 1. 执行TWinControl.Invalidate;后,执行Pe
阅读全文
摘要:-------------------- TWinControl收到WM_Paint消息(以后找个例子)-------------------- 1. 消息函数 TWinControl.WMPaint (默认不是双缓冲)2.1 如果没有csCustomPaint状态,并且没有子控件,那么执行inhe
阅读全文
摘要:-------------------------- 分析TEdit的创建与显示过程 --------------------------TCustomEdit = class(TWinControl) 分析TEdit的创建与显示过程(注意,它不是由TCustomControl派生而来): T...
阅读全文
摘要:-------------------------- 显示隐藏刷新 --------------------------TControl = class(TComponent)procedure Show; 调用 Parent.ShowControl(Self);procedure Refresh;...
阅读全文
摘要:TGraphicControl = class(TControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; protected procedure Paint; vir
阅读全文
摘要:新发现一个函数(尽管不起作用): TWinControl用来处理鼠标和实际重绘,而处理鼠标全部在TControl里。此外还申请句柄,处理自己绘图,与父类的交互。虽然TControl也有绘图,但最后还是要让父类TWinControl来画。 贴一下TWinControl的几个关键的自绘代码: TWinC
阅读全文
摘要:关键在于TWinControl都是系统自绘,而TCustomControl都是Delphi自绘 真正区别之处,我觉得是在这里: 另外还有
阅读全文