我如何发现我的delphi应用程序当前是否有模式窗口?
-
08-07-2019 - |
题
我在 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 标识的窗口不是顶级窗口,或者它被另一个窗口拥有。
不隶属于 StackOverflow