很多时候,在
Windows 98时代之后,我们经历过一些对话失去了Z-Order,并回到了之前的形式.
例如:@H_502_2@
Dialog1.ShowModal; Dialog1.OnClickButton() : ShowMessage('anything');
当MessageBox出现时,它有时没有焦点,并在Dialog1下移动.
用户感到困惑,他们说:我的应用程序冻结!
但是如果他们使用Alt Tab移动到另一个应用程序并返回,焦点返回到MessageBox,它将是前台窗口.@H_502_2@
我们已经体验过ShowMessage,MessageBox,正常表单和QuickReport表单.@H_502_2@
有人知道吗这是Windows错误吗?你怎么能阻止它?如何抓住这个?@H_502_2@
谢谢你的帮助:
DD@H_502_2@
我真的说,在Win98之后,所以所有的操作系统(Win7也)都受到这个问题的影响.
我们使用Delphi 6 Prof,所以属性不能与默认表单一起使用.@H_502_2@
有人说消息对话框可以通过MessageBox MB_APPLMODAL来控制.
这是个好消息,但是我们有很多旧的表单和组件,第三方工具.@H_502_2@
所以用这种形式来代替一个全新的应用程序是很难的.@H_502_2@
但是我们会尝试这样做.@H_502_2@
我认为答案是这是一个半应用程序问题和一半的Windows问题.如果Windows有时处理这个,有时候不会这样 – 似乎是一个Windows错误.
但是如果我们可以强制使用模态窗口,那么它是一个编程错误.@H_502_2@
有人可以向我解释WS_POPUP标志的意思是什么?
是否有一些副作用?@H_502_2@
谢谢:
DD@H_502_2@
这就是
PopupMode
and PopupParent
properties.
例如,你可以做:@H_502_2@
Dialog1.PopupMode := pmExplicit; Dialog1.PopupParent := self; Dialog1.ShowModal;
这告诉Windows正确的Z顺序.@H_502_2@