2009-04-24 25 views
2

请解释之间的区别:问题设置的父新形式DLL

ChildForm := TForm.CreateParented(AOwner) 

ChildForm := TForm.CreateParentedControl(AOwner) 

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

这个例子可能是复杂难懂的,我真的就像当人们使用不同种类的创建方法的概述表单。

德尔福7帮忙告诉我,我应该使用CreateParented(AOwner.Handle)和ParentWindow:= AOwner.handle与非VCL控制或跨DLL的。直到昨天,我只是设置了父母:= AOwner,我完全不知道为什么这个停止工作。

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

+1

你能找到一个更好的问题标题吗? (除非这是您的活动的一部分,以获得负面的反馈。) – mghie 2009-04-24 13:56:32

回答

4

我们有组件。它们是窗体或数据模块上的可见或不可见项目。每个组件都可以拥有一个负责最终销毁的所有者。如果没有主人,你必须自己照顾破坏。

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

我们也有WinControls的它们是链接到窗口对象的控制。他们也有父窗口的句柄。

所以:

  1. TMyControl.CreateParented 构造CreateParented(ParentWindow:HWND);

    这被用来创建从由一个手柄设置在父窗口的控制。 它创建没有所有者的控件并将父窗口设置为ParentWindow。

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

    创建控制,无需拥有者,设置parentwindow到ParentWindow并返回 它。

  3. TMyControl.Create(AOwner:TComponent)

    创建具有所有者设定为AOwner的控制。

  4. TMyControl.ParentWindow:= AOwner.Handle;

    将parentwindow(句柄)设置为AOwner的句柄。