我有一个包含多种形式的Delphi 6应用程序。在“编译器选项”中选择的表单作为主要表单的一个重要特征是,当它被最小化时,应用程序中的所有其他表单(窗口)都被最小化,相反,当它被还原时,所有其他可见的表单都将被恢复
我想在运行时将主窗体的特性切换到应用程序的另一种形式,因此它就像这种意义上的主要形式(最小化/恢复领导)。是否有Delphi技术或Windows API调用,这将允许我这样做?如果没有,有没有办法让二级表单模拟这种行为,不会造成比它值得多的问题?
答案 0 :(得分:2)
实际上,您所描述的行为决定了窗口owner。请注意,我使用的是Windows术语而不是VCL术语。在Windows术语中,所有者的含义与VCL含义不同。
MSDN有关窗口所有权的说法:
重叠或弹出窗口可以由另一个重叠或弹出窗口拥有。拥有在窗口上设置了几个约束。
- 拥有的窗口始终位于z订单的所有者之上。
- 系统会在其所有者被销毁时自动销毁拥有的窗口。
- 拥有的窗口在其所有者最小化时隐藏。
因此,您希望能够控制的是表单所有者而不是主要表单。 VCL允许您指定哪个表单是任何其他表单的所有者。
要控制VCL表单的所有者,您需要使用PopupMode
和PopupParent
属性。
MySecondaryForm.PopupMode := pmExplicit;
MySecondaryForm.PopupParent := MyOtherSecondaryForm;
目前,您的代码可能正在使用PopupMode
的默认pmAuto
。在此模式下,活动表单将用作表单所有者,这通常意味着主表单是所有辅助表单的最终所有者。