2010-07-22 47 views
1

我有一个Delphi 2006应用程序,当检测到错误条件时弹出模态警报对话框。由于检查错误情况是在空闲处理程序中完成的,如果恰好显示该对话框,该对话框可以弹出到另一个模式对话框的顶部。这可能会导致用户在警告对话框关闭后应用程序主窗体不能获得焦点的情况下出现混淆,因为这是另一个模糊的对话框。德尔福 - 检测我的应用程序是否有模式对话框打开

我想要做的就是在应用程序打开任何模式对话框时推迟警报弹出窗口。

我试过GetLastActivePopup(MyMainWindow.Handle),但它似乎总是返回非零值。

+0

可能的重复[如何发现我的delphi应用程序当前是否有模态窗口?](http://stackoverflow.com/questions/284581/how-do-i-discover-if-my-delphi-application - 当前有模态窗口) – mghie 2010-07-22 07:20:52

回答

2

使用AnyPopup()函数

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

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

+1 AnyPopup;还请添加该答案http://stackoverflow.com/questions/284581/how-do-i-discover-if-my-delphi-application-currently-has-a-modal-window注意我已经sligtly编辑你的答案指出您提到的功能的在线文档。 – 2010-07-22 07:42:43

+0

@Jeroen:AnyPopup文档声明:'此功能仅用于与16位版本的Windows兼容。这通常是没有用的。“不是那么值得推荐的东西......? – 2010-07-22 08:02:36

+0

@ jeroen-pluimers感谢您的编辑。我会把它作为规则。 – histrio 2010-07-22 08:04:52

2

只是测试

if not IsWindowEnabled(MyMainWindow.Handle) then 

这也将照顾situtations的当非德尔福对话框行动模式,就像在windows.MessageBox(Handle...。或通用对话框显示(即TOpenDialog)。

+0

不幸的是,如果一个非Delphi对话框以模态方式打开,我将失去Application OnIdle调用,所以应用程序无论如何都会被有效冻结。 – rossmcm 2010-07-22 12:50:48

+0

ProcessMessages()不处理“冻结”问题,rossmcm? – 2011-06-16 06:41:57