delphi内部机制探讨? 胡说几句:利用了Stream机制TReader类起了很大的作用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 右击窗体,选view as text你就知道了 View as Text这当然我知道,只是这些文本该不会自己去创建窗体吧?我想知道的是wave_calmly(静波),outer2000(天外流星) 两位说的,TReader对象是不是调用了API函数CreateWindow来创建窗体?是怎样创建的,我很想知道其中细节 我猜测可能是读取text中的数据,作为api函数的参数,delphi封装了其中的机制,应该是创建一个窗体对象,根据参数来确定对象的特征1 就是调用CreateWindow建议F7跟踪一下源代码这是我以前跟踪的随手瞎记的,有些乱不一定准确Application.CreateFormTForm.Create(Self) ==== self 为ApplicationCreateNew(AOwner)InitInheritedComponent(Self, TForm)InitComponentInternalReadComponentRes(TForm1)FindResource(HInst, PChar(ResName), RT_RCDATA); == ResName为TForm1TResourceStream.Create(HInst, ResName, RT_RCDATA)调用TResourceStream.ReadComponent(Instance);并赋予Instance调用TReader.CreateReader.ReadRootComponentReadState(Self);调用到TComponent的ReadState调用TReader.ReadDataReadDataInnerReadProperty继续TReader.ReadComponent读取子控件在子控件SetParent时调用TForm的InsertControl读取完后,调用TForm.UpdateControlState调用UpdateShowing返回到TCustomForm.ReadState的调用Canvas.TextHeight在RequiredState调用Canvas.CreateHandle由于Canvas需要调用其宿主窗体的GetDeviceContext取得设备描述表句柄然后调用GetDC,GetDC需要窗体的Handle,这时就跳转到HandleNeeded这样终于调用了窗体的CreateHandle-CreateWnd-CreateParams这样就完成了窗口的创建 多谢老达摩、king_dragon参与讨论! qry1.Filter的一个问题 请教下TColorBox控件的问题 Destructors 和 Constructors 有舍分别?(初学者) 我有一个复杂查询,查询结果无列名,我该怎样在edit上显示他的结果呢? 关于INNO SETUP的安装问题 请问Delphi中的TreeView控件的数据存贮方式是什么?如何设计一个类似的数据结构 控件问题 ? Delphi中怎样实现双面打印功能 Delphi5 中文帮助第一预览版发布 如何创建不规则形窗体? 在项目文件中怎样调用主窗体文件中的过程与函数???——————在线等待!! ?mdi窗口怎样显示背景图
你就知道了
是wave_calmly(静波),outer2000(天外流星) 两位说的,TReader对象是不是调用了API函数CreateWindow来创建窗体?是怎样创建的,我很想知道其中细节
建议F7跟踪一下源代码
这是我以前跟踪的随手瞎记的,有些乱
不一定准确
Application.CreateForm
TForm.Create(Self) ==== self 为Application
CreateNew(AOwner)
InitInheritedComponent(Self, TForm)
InitComponent
InternalReadComponentRes(TForm1)
FindResource(HInst, PChar(ResName), RT_RCDATA); == ResName为TForm1
TResourceStream.Create(HInst, ResName, RT_RCDATA)
调用TResourceStream.ReadComponent(Instance);并赋予Instance
调用TReader.Create
Reader.ReadRootComponent
ReadState(Self);
调用到TComponent的ReadState
调用TReader.ReadData
ReadDataInner
ReadProperty
继续TReader.ReadComponent读取子控件
在子控件SetParent时
调用TForm的InsertControl
读取完后,调用TForm.UpdateControlState
调用UpdateShowing
返回到TCustomForm.ReadState的
调用Canvas.TextHeight
在RequiredState调用Canvas.CreateHandle
由于Canvas需要调用其宿主窗体的GetDeviceContext取得设备描述表句柄
然后调用GetDC,GetDC需要窗体的Handle,这时就跳转到HandleNeeded
这样终于调用了窗体的CreateHandle-CreateWnd-CreateParams
这样就完成了窗口的创建