请解释之间的区别:
ChildForm := TForm.CreateParented(AOwner)
ChildForm := TForm.CreateParentedControl(AOwner)
ChildForm := TForm.Create(AOwner);
ChildForm.ParentWindow := AOwner.Handle
这个例子可能很复杂和复杂,我真的只是想一下人们何时使用不同类型的创建方法进行表单。
Delphi 7帮助告诉我,我应该使用CreateParented(AOwner.Handle)和ParentWindow:= AOwner.handle与非VCL控件或DLL。直到昨天我才设置Parent:= AOwner,我完全不知道为什么停止工作。
(也许我只需要重新启动计算机)
答案 0 :(得分:4)
我们有组件。它们是表单或数据模块上的可见或不可见项。每个组件都可以拥有一个负责最终销毁的所有者。如果没有所有者,你必须自己处理破坏。
我们有控件,它们是可见的组件。他们还有一个包含控件的Parent。例如,Panel是该面板上按钮的父级。
我们还有WinControls,它们是链接到windows对象的控件。它们还有父窗口的句柄。
所以:
TMyControl.CreateParented 构造函数CreateParented(ParentWindow:HWnd);
这用于创建一个控件,句柄从中提供父窗口。 它创建没有所有者的控件,并将父窗口设置为ParentWindow。
TMyControl.CreateParentedControl class function CreateParentedControl(ParentWindow:HWND):TWinControl;
创建没有所有者的控件,将父窗口设置为ParentWindow并返回 它
TMyControl.Create(AOwner:TComponent)
创建一个所有者设置为AOwner的控件。
TMyControl.ParentWindow:= AOwner.Handle;
将父窗口(句柄)设置为AOwner的句柄。