【问题标题】:Problem setting parented to new form in DLL问题设置为 DLL 中的新表单的父级
【发布时间】:2010-10-21 14:45:55
【问题描述】:

请解释两者的区别:

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,我完全不知道为什么它会停止工作。

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

【问题讨论】:

  • 您能找到更好的问题标题吗? (除非这是您获得负面反馈的活动的一部分。)
  • 好点,但没有这预示着活动

标签: delphi parent-child


【解决方案1】:

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

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

我们还有 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 的句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2014-09-27
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多