delphi 系统对话框(如浏览目录)被隐藏到主窗体后面造成程序无法操作的临时处理方式


本文整理自网络,侵删。

 
说实在话,我被这个问题困扰不知道多少年了,具体的原因我实际上到现在为止仍未找到。不过这里提供一个临时的解决办法,使用定时器来检查当前进程的活动窗口与 Screen.ActiveForm 是否一致,如果不一致,则检查 Screen.ActiveForm 是否被禁用了(注意不要看它的 Enabled,而是调用 API),如果被禁用了,则说明弹出的对话框不是 Delphi 的 Form,我们调用 SetWindowPos 来其它调整到最前面显示就可以,定时器的处理代码参考如下:

procedure TForm1.Timer1Timer(Sender:TObject);
var
   ATopWindow:THandle;
begin
  ATopWindow:=GetActiveWindow;
  if (ATopWindow<>Screen.ActiveForm.Handle) and (not IsWindowEnabled(Screen.ActiveForm.Handle)) then
    SetWindowPos(ATopWindow,HWND_TOP,0,0,0,0,SWP_NOSIZE OR SWP_NOMOVE);
end;
这个暂时是治标的办法,至于治本的办法,由于单独建立 Demo 测试许多时候都无法重现,所以暂时放弃吧,不得已……

http://blog.qdac.cc/?p=4808

相关阅读 >>

Delphi 动态创建一个ipedit控件

Delphi filecreate 建立新文件

Delphi中case语法的使用方法

Delphi pchar与string互转

Delphi得到字符串中第一个汉字的位置

Delphi 如何将颜色值转换为灰度颜色值?

Delphi winapi: writeprivateprofilestring、getprivateprofilestring - 简单读写 ini 文件

Delphi tclientdataset用法详解

Delphi findfiles获取目录下所有文件

手动创建和部署一个classes.dex 查看更多关于 classes.dex 的文章 文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...