2

请解释两者之间的区别:

ChildForm := TForm.CreateParented(AOwner)

ChildForm := TForm.CreateParentedControl(AOwner)

ChildForm := TForm.Create(AOwner); 
ChildForm.ParentWindow := AOwner.Handle 

这个例子可能很复杂和令人费解,我真的很想了解人们何时使用不同种类的 Create 方法来创建表单。

Delphi 7 帮助告诉我,我应该将 CreateParented(AOwner.Handle) 和 ParentWindow := AOwner.handle 与非 VCL 控件或跨 DLL 一起使用。直到昨天我才设置了 Parent := AOwner,我完全不知道为什么它会停止工作。

(也许我只需要重新启动我的电脑)

4

1 回答 1

4

我们有组件。它们是表单或数据模块上可见或不可见的项目。每个组件都可以有一个负责最终销毁的所有者。如果没有所有者,您必须自己处理破坏。

我们有控件,它们是可见的组件。他们还有一个包含控件的父级。例如,面板是该面板上按钮的父级。

我们还有 WinControls,它们是链接到 windows 对象的控件。它们也有父窗口的句柄。

所以:

  1. TMyControl.CreateParented 构造函数 CreateParented(ParentWindow: HWnd);

    这用于创建一个控件,其父窗口由句柄提供。它创建没有所有者的控件并将父窗口设置为 ParentWindow。

  2. TMyControl.CreateParentedControl 类函数 CreateParentedControl(ParentWindow: HWND): TWinControl;

    创建没有所有者的控件,将父窗口设置为 ParentWindow 并返回它。

  3. TMyControl.Create(AOwner:TComponent)

    创建一个所有者设置为 AOWner 的控件。

  4. TMyControl.ParentWindow := AOwner.Handle;

    将父窗口(句柄)设置为 AOwner 的句柄。

于 2009-04-24T14:15:34.297 回答