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

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

有帮助吗?

解决方案

您可以尝试使用此代码:

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

  end;
end;

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

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

其他提示

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

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

使用 任意弹出窗口() 功能

关于 获取最后一个活动弹出窗口()。当它返回值可能与hWnd参数相同时

  • hWnd 标识的窗口最近处于活动状态。
  • hWnd 标识的窗口不拥有任何弹出窗口。
  • hWnd 标识的窗口不是顶级窗口,或者它被另一个窗口拥有。

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

他的在另一个主题中回答向您展示如何检查。

- 的Jeroen

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top