代码之家  ›  专栏  ›  技术社区  ›  Roland Bengtsson

如何确保对话框始终位于主窗口的前面

  •  3
  • Roland Bengtsson  · 技术社区  · 14 年前

    我还没有找到最好的解决办法。我有一个非模态对话框,可以通过应用程序中的热键在无限实例中打开。即使对话框本身也可以打开一个新实例。我希望这些对话框始终位于主应用程序窗口的前面。我试过几件事。

    • 将FormStyle设置为fsStayonTop。这样做是可行的,但它的优点是对话框将位于所有窗口甚至其他应用程序的前面。我只想把它放在主窗口的前面。
    • 将弹出模式设置为pmauto。除一个对话框打开另一个对话框的情况外,此方法也有效。如果第一个对话框关闭,则它会自动关闭第二个对话框。这是不可接受的。
    • 使用表单的默认属性。只要单击主窗口,打开的对话框就位于主窗口后面。

    其他建议:—)

    4 回复  |  直到 14 年前
        1
  •  7
  •   Sertac Akyuz    14 年前

    TCustomForm.PopupParent Property ;

    如果PopupMode属性设置为 pmexplicit和popupparent为零, 那么application.mainform就是 隐式用作Popupparent

    .

        2
  •  2
  •   kludg    14 年前

    Afaik Delphi 2007支持MainformontaskBar功能。用

       Application.MainFormOnTaskbar := True;
    

    在项目源中,任何应用程序表单(具有默认父窗口)都显示在主表单的上方。


    如果您不确定主窗体是什么,请转到项目/选项/窗体并设置正确的主窗体。 另一个可能的原因是,您正在从以前的Delphi版本升级一个项目,这样项目源代码就不包含上面的代码行——手工添加这一行。

        3
  •  0
  •   Patrick Moloney    14 年前

    我认为你的第一次努力,fsstayontop,是最好的选择。 在其他应用程序面前显示的问题可能是无法避免的,因为您真正使用的是Windows功能,而不是Delphi独有的功能。

    我记得手动设置z顺序是可能的,但在大多数应用程序中,这是一个冗长到不可能的过程。

    如果您的对话框没有隐藏其他应用程序那么大,它可以被移动,用户仍然可以访问其他应用程序,而无需首先与您的对话框进行交互。似乎还不错。

        4
  •  -1
  •   Gregor Brandt    14 年前

    您可以尝试观看OnHide事件,并立即使可见标志变为真。但这可能会导致闪烁。