我正在维护一个最初用Delphi 7编写并移植到Delphi XE的应用程序。

使用Windows 7,我们遇到了一些问题,例如模态窗口出现在主窗口下以及最终无法与程序进行交互,因为希望用户与模态表单进行交互,而这是不可能的,因为它位于主窗口下。

为避免此问题,我将项目的MainFormOnTaskBar属性更改为True(旧项目没有此属性),现在我继续执行同一项目。阅读文档时,我发现了新的Form属性PopupParent。如果将MainFormOnTaskBar设置为True,是否必须使用此属性?这个问题还有其他解决方案吗?

最佳答案

是的,对于“突然出现”的模式形式,您必须使用PopupParentPopupMode固定Z顺序,如Allen Bauer在他的博客文章PopupMode and PopupParent中所述。

MainFormOnTaskBar文档说它与弹出窗口无关:它用于选择从何处(您的ApplicationMainForm)获取任务栏上的标题/图标信息。

但是,MainFormOnTaskBar := True做得更多,而this article by Steve Trefethen(Delphi团队的前任成员)则更详细地解释了更多细节。

该“更多”具有涉及z阶的结果。您可能会或多或少希望一些,因此这里有一些示例:


MainForm will be parent of new child windows其中makes the Z-order of the MainForm always less than the child windows
就像您观察到的那样,它解决了Delphi MainFormOnTaskBar := False)
它启用了某些形式的对接like in the LMD components


请注意,解决与Vista一起引入的问题绝非易事,因为Microsoft引入了更多功能,但也取消了一些以前拥有的自由应用程序。阅读Nathanial Woolls的these两个articles,以对它们有更好的印象。

07-25 23:45