如何发现我的delphi应用程序目前是否有模态窗口?

时间:2008-11-12 16:50:41

标签: delphi modal-dialog mdi

我在Delphi MDI应用程序中运行了一个计时器,如果后台发生变化,我想用它来弹出一条消息。但是当应用程序在前台有一个模态对话框时,我不希望弹出该消息,因为用户无法对其进行任何操作。

所以我想知道的是如何在我的应用程序中检查是否存在模态对话框?

5 个答案:

答案 0 :(得分:9)

您可以尝试使用此代码:

var
  ActForm: TCustomForm;
begin
  ActForm := Screen.ActiveForm;
  if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin

  end;
end;

我用Delphi 4测试过,对我有用。

[编辑]:但你应该考虑是否弹出一个表格并窃取焦点是一个好主意。这取决于您的应用程序,但如果用户当前正在编辑字段中输入内容或使用鼠标执行某些操作,则可能会破坏其工作流程。

答案 1 :(得分:6)

自Delphi 2005起,您在TApplication上拥有ModalLevel属性。它计算在应用程序中打开的模态表单的数量。

答案 2 :(得分:2)

也许解决方案是实际弹出一个不会窃取焦点的提示。可点击的提示在某处可见,但不是太具侵略性。因此,如果用户想要采取行动,或者他们可以完成他们正在做的事情,那么就采取行动。或者完全忽略它。

答案 3 :(得分:2)

使用AnyPopup()函数

关于GetLastActivePopup()。它可能返回值与

时的hWnd参数相同
  • hWnd识别的窗口最近处于活动状态。
  • hWnd标识的窗口没有任何弹出窗口。
  • hWnd标识的窗口不是顶级窗口,也不属于另一个窗口。

答案 4 :(得分:1)

今天用户histrioanother thread中正确回答了仅仅监控模态Delphi形式是不够的; Windows也可以有模态对话框。

他的answer in another thread告诉你如何检查。

- 的Jeroen