Delphi应用程序窗口的z顺序和MainFormOnTaskBar属性

8 forms delphi z-order windows-7 delphi-xe

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

使用Windows 7,我们遇到了一些问题,比如主窗口下出现的模态窗口以及最终无法与程序交互,因为用户需要与模态窗体进行交互,这是不可能的,因为它位于主窗口下面.

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

Jer*_*ers 7

是的,对于"pop-under"的模态形式,你必须使用PopupParentPopupMode修复Z顺序,正如Allen Bauer在他的博客文章PopupMode和PopupParent中所解释的那样.

MainFormOnTaskBar文档说它与pop-under几乎没有关系:它用于选择从(您的应用程序MainForm)获取任务栏上的标题/图标信息的位置.

然而,MainFormOnTaskBar := True确实越来越这篇文章由史蒂夫Trefethen(如Delphi小组成员)解释了许多详细信息,它的更多细节.

这种"更多"具有涉及z次序的后果.有些你可能想要更多或更少,所以这里有一些例子:

请注意,解决Vista引入的问题并非易事,因为微软推出了更多功能,但也带走了一些自由应用程序.阅读Nathanial Woolls的两篇文章,以获得更好的印象.

  • 不幸的是,多年来`MainFormOnTaskBar`已经发展到不仅仅是决定在TaskBar上出现哪个HWND.它主要用于启用/禁用VCL中的许多Vista +功能(而不是创建新属性来管理它们).当'PopupParent`为零时,它**在选择用于z次序处理的H​​WND时起作用. (4认同)