代码之家  ›  专栏  ›  技术社区  ›  Peter Turner

在DLL中设置新窗体的父级时出现问题

  •  2
  • Peter Turner  · 技术社区  · 17 年前

    请解释以下两者之间的区别:

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

    这个例子可能很复杂,我真的很想了解一下人们何时使用不同的表单创建方法。

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

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

    1 回复  |  直到 17 年前
        1
  •  4
  •   Toon Krijthe    17 年前

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

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

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

    因此:

    1. TMyControl.CreateParented

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

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

      创建不带所有者的控件,将parentwindow设置为parentwindow并返回 信息技术

    3. TMyControl.Create(AOwner:TComponent)

      创建所有者设置为AOOwner的控件。

    4. 将父窗口(句柄)设置为AOOwner的句柄。