我在Delphi MDI应用程序中运行了一个计时器,如果后台发生变化,我想用它来弹出一条消息。但是当应用程序在前台有一个模态对话框时,我不希望弹出该消息,因为用户无法对其进行任何操作。
所以我想知道的是如何在我的应用程序中检查是否存在模态对话框?
答案 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参数相同答案 4 :(得分:1)
今天用户histrio在another thread中正确回答了仅仅监控模态Delphi形式是不够的; Windows也可以有模态对话框。
他的answer in another thread告诉你如何检查。
- 的Jeroen