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

时间:2010-08-23 15:36:35

标签: delphi dialog delphi-2007 nonblocking

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

  • 将FormStyle设置为fsStayOntop。这有效但有一个优点,即对话框将位于所有窗口的前面,甚至是其他应用程序。我只希望它在我主窗口的前面。
  • 将PopupMode设置为pmAuto。这也适用于一个对话框打开另一个对话框的情况。如果第一个对话框关闭,则会自动关闭第二个对话框。这是不可接受的。
  • 使用表单的默认属性。单击主窗口后,打开的对话框就会出现在主窗口后面。

任何其他建议: - )

4 个答案:

答案 0 :(得分:7)

来自TCustomForm.PopupParent Property;

  

如果PopupMode属性设置为   pmExplicit和PopupParent为零,   那么Application.MainForm就是   隐式用作PopupParent

答案 1 :(得分:2)

AFAIK Delphi 2007支持MainFormOnTaskbar功能。与

   Application.MainFormOnTaskbar := True;
项目源中的

任何申请表格(默认父窗口)显示在主窗体上方。


如果您不确定主表格是什么表格,请转到项目/选项/表格并设置正确的主表格。 另一个可能的原因是您正在从之前的Delphi版本升级项目,因此项目源不包含上面的代码行 - 手动添加此行。

答案 2 :(得分:0)

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

我记得可以手动设置Z顺序,但在大多数应用程序中这是不可能的。

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

答案 3 :(得分:-1)

您可以尝试观看OnHide事件并立即将Visible标志设置为TRUE。这可能会导致闪烁。