我在我的 Delphi MDI 应用程序中运行了一个计时器,如果后台发生变化,我想用它来弹出一条消息。但是我不希望当应用程序在前台有一个模式对话框时弹出该消息,因为用户对此无能为力。
所以我想知道的是如何检查我的应用程序中是否存在模式对话框?
我在我的 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 以来,您在 TApplication 上有一个ModalLevel属性。它计算在应用程序中打开的模态表单的数量。
也许解决方案是实际弹出一个不会窃取焦点的提示。一个可见的可点击提示,但不是太具有侵略性。因此,如果用户想要采取他们可以采取的行动,或者他们可以完成他们正在做的事情,那么就采取行动。或者也许完全忽略它。
使用AnyPopup () 函数
关于GetLastActivePopup ()。它可能返回值与 hWnd 参数相同时