Delphi窗体研究,留个爪,以后回来研究
Delphi - 窗体创建过程
来自大富翁.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
1、TCustomForm.Create 在 TCustomForm.Create 中调用 TCustomForm.CreateNew;2、TCustomForm.CreateNew; 调用 FCanvas := TControlCanvas.Create; 触发 TControlCanvas.Create; 触发 TControlCanvas.CreateHandle;3、TControlCanvas.CreateHandle; 调用 FControl.GetDeviceContext(FWindowHandle); 即 TWinControl.GetDeviceContext(FWindowHandle);4、TWinControl.GetDeviceContext(FWindowHandle); 调用 TWinControl.GetDC(Handle);此处说明一下: 对 TWinControl 的 Handle 属性的读取会触发 TWinControl.GetHandle;可以察看 Property Handle; 的声明。5、第四步中对 Handle 进行读取,触发下述序列:(TWinControl) Handle->GetHandle->HandleNeeded6、TWinControl.HandleNeeded 检查 FHandle 的值: if FHandle = 0 then begin if Parent <> nil then Parent.HandleNeeded; CreateHandle; // 调用 CreateHandle; end;7、TWinControl.CreateHandle 调用 CreateWnd; if FHandle = 0 then // 此时 FHandle 仍然为零 begin CreateWnd; ... end;8、TWinControl.CreateWnd 调用 CreateParams(Params); // 让用户有机会加入新的特征参数 CreateParams(Params); with Params do begin ... // 标准的 API 使用,注册窗口类,CreateWindowEx ... if Windows.RegisterClass(WindowClass) = 0 then RaiseLastWin32Error; ... CreateWindowHandle(Params); ... end;9、CreateWindowHandle(Params); FHandle := CreateWindowEx(ExStyle, WinClassName, Caption, Style, X, Y, Width, Height, WndParent, 0, WindowClass.hInstance, Param); 完成真正的窗口创建,并赋予 FHandle 窗口句柄。10、回到第一步 CreateNew 之后调用 DoCreate try CreateNew(AOwner); ... if OldCreateOrder then DoCreate; finally ... end;11、DoCreate 调用用户的 OnCreate 事件: if Assigned(FOnCreate) then try FOnCreate(Self); // 调用 OnCreate; except Application.HandleException(Self); end; if fsVisible in FFormState then Visible := True; |
我们OnCreate事件最后才触发的.
http://www.cnblogs.com/huangjacky/archive/2010/01/08/1642413.html
Delphi窗体研究,留个爪,以后回来研究的更多相关文章
- delphi 窗体透明
TransparentColor:=true; TransparentColorValue:=clFuchsia; Color:= TransparentColorValue; ...
- Delphi窗体创建释放过程及单元文件小结(转)
Delphi窗体创建释放过程及单元文件小结 Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时 ...
- delphi 窗体自适应屏幕分辨率
delphi 窗体自适应屏幕分辨率 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设计器,这一点让VC粉丝垂涎三尺而不可得.但是,Delphi里设计的窗体并没有自动 ...
- 解决Delphi窗体缩放の疑难杂症
http://anony3721.blog.163.com/blog/static/511974201082235754423/ 解决Delphi窗体缩放の疑难杂症 2010-09-22 15:57: ...
- Delphi 窗体函数GetWindow
Delphi 窗体函数GetWindowGetWindow是计算机的函数,该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄,函数原型是HWND GetWindow(HWND hWnd,UIN ...
- delphi 窗体的位置和高宽度-TForm:Letf、Top、Width、Height、ClientWidth、ClientHeight
delphi 窗体的位置和高宽度-TForm:Letf.Top.Width.Height.ClientWidth.ClientHeight [窗体的高度和宽度]: [客户区的高度和宽度]: [窗体在屏 ...
- 绘制delphi窗体的标题栏
绘制delphi窗体的标题栏 按照设计,Delphi窗体的“标题”属性是由Windows负责绘制,标题栏在系统菜单旁边.如果你不想改变窗体的标题属性又想在窗体的标题栏添加一些自己的内容,你需要处理一个 ...
- switch留个爪,之后还需要再研究下
public class SwitchDemo { public static void main (String [] args) { for(int i = 0; i < 10; i++) ...
- delphi 窗体的创建和释放
Delphi中的窗体分为模式窗体和无模式窗体.二者的区别在于,用户可以在无模式窗体和其他窗体之间切换.这样,用户就可以同时工作于一个应用程序的几个部分.Delphi中窗体的初始化有两种情况,动态创建, ...
随机推荐
- javascript 中event是全局变量
The only thing I can think of is that event is in fact window.event and it makes itself available wh ...
- AndroidStudio快捷键大全
很多近期学习移动开发的朋友都是通过Eclipse集成ADT开发安卓程序.但是谷歌已经推出了自己的亲儿子--Android Studio.可以说比原来的开发工具强大很多,现在各大公司也已经逐渐淘汰了Ec ...
- Gizmos 辅助线框
Gizmos are used to give visual debugging or setup aids in the scene view. Gizmos是用于在场景视图可视化调试或辅助设置. ...
- 虚拟机只有IPv6,没有ipv4
1.修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none HWADDR=00:0C:29:20: ...
- vs无法引用项目问题
vs无法引用项目问题 2017年12月13日 14:45:31 阅读数:582 开发时编译报错--项目A未被引用,展开项目的引用,发现该项目实质已经被引用了,但是该引用上有个黄色三角感叹号,遂移除该引 ...
- C# 使用UUID生成各种模式方法
UUID简单说明 常见的方式.可以利用数据库也可以利用程序生成,一般来说全球唯一. 优点: 1)简单,代码方便. 2)生成ID性能非常好,基本不会有性能问题. 3)全球唯一,在遇见数据迁移,系统数据合 ...
- list集合转换成json类型
public String gettext(HttpServletRequest request,HttpServletResponse response){ List<xuanhuan_> ...
- Junit内部解密之三: 单元测试用例运行的全过程
转自:http://blog.sina.com.cn/s/blog_6cf812be0100x8sb.html 我们以一个非常简单的TestCalculator类为例,只有一个测试方法: Public ...
- nl 命令
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- 关于ViewData,ViewBag,TempData三者学习记录!
关于ViewData,ViewBag,TempData三者学习分享! 1.ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["Key"] . 2. ...