6

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

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

4

5 回答 5

11

您可以尝试使用以下代码:

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

  end;
end;

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

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

于 2008-11-12T17:01:07.850 回答
7

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

于 2008-11-13T08:21:11.627 回答
2

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

于 2008-11-12T17:37:56.997 回答
2

使用AnyPopup () 函数

关于GetLastActivePopup ()。它可能返回值与 hWnd 参数相同时

  • hWnd 标识的窗口最近处于活动状态。
  • hWnd 标识的窗口不拥有任何弹出窗口。
  • 由 hWnd 标识的窗口不是顶级窗口,或者它属于另一个窗口。
于 2010-07-22T08:01:35.230 回答
1

今天用户histrio在另一个线程中正确回答了仅监视模态 Delphi 表单是不够的;Windows 也可以有模式对话框。

在另一个线程中的回答向您展示了如何检查。

——杰伦

于 2010-07-22T07:45:19.400 回答