【问题标题】:Can I change the "main form" in a Delphi 6 application at runtime?我可以在运行时更改 Delphi 6 应用程序中的“主窗体”吗?
【发布时间】:2012-02-26 04:38:25
【问题描述】:

我有一个包含多种表单的 Delphi 6 应用程序。在 Compiler Options 中选择作为主窗体的窗体的一个重要特征是,当它被最小化时,应用程序中的所有其他窗体(窗口)都被最小化,相反,当它被恢复时,所有其他可见的窗体都被恢复.

我想在运行时将主窗体的特性切换到应用程序的另一种窗体,以便它在这个意义上就像主窗体(最小化/恢复领导力)。是否有允许我这样做的 Delphi 技术或 Windows API 调用?如果没有,有没有办法让辅助表单模拟这种行为,而不会导致比其价值更多的问题?

【问题讨论】:

标签: windows delphi winapi


【解决方案1】:

实际上决定你描述的行为的是窗口owner。请注意,我使用的是 Windows 术语而不是 VCL 术语。在 Windows 术语中,owner 的含义与 VCL 的含义不同。

MSDN 对窗口所有权有这样的看法:

重叠或弹出窗口可以由另一个重叠或弹出窗口拥有。拥有所有权会给窗口带来一些限制。

  • 拥有的窗口在 z 顺序中始终位于其所有者之上。
  • 当所有者被销毁时,系统会自动销毁拥有的窗口。
  • 拥有的窗口在其所有者最小化时被隐藏。

因此,您希望能够控制的是表单所有者,而不是主表单。 VCL 确实允许您指定哪个表单是任何其他表单的所有者。

为了控制 VCL 表单的所有者,您需要使用 PopupModePopupParent 属性。

MySecondaryForm.PopupMode := pmExplicit;
MySecondaryForm.PopupParent := MyOtherSecondaryForm;

目前,您的代码可能正在使用默认的 PopupModepmAuto。在这种模式下,活动表单被用作表单所有者,这通常意味着主表单是所有辅助表单的最终所有者。

【讨论】:

  • @DavidHeffernam - 再次感谢您的帮助。我会按照您的建议仔细查看我的表单设置。
猜你喜欢
  • 2014-10-29
  • 2021-02-28
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2010-10-15
  • 2015-09-30
  • 1970-01-01
相关资源
最近更新 更多