在 Windows 98 时代之后,我们多次遇到一些对话框失去其 Z 顺序并返回到以前的形式。
例如:
Dialog1.ShowModal;
Dialog1.OnClickButton() : ShowMessage('anything');
出现MessageBox时,有时没有焦点,移到Dialog1下。 用户对此感到困惑,他们说:我的应用程序卡住了!!! 但是,如果他们使用 Alt+Tab 移动到另一个应用程序并返回,焦点将返回到 MessageBox,它将成为前景窗口。
我们在 ShowMessage、MessageBox、普通表单和 QuickReport 表单中遇到过这种情况。
有人知道吗?它是 Windows 错误吗?你怎么能阻止它?如何捕获这个?
感谢您的帮助: dd
我确实是在 Win98 之后说的,所以所有操作系统(也包括 Win7)都受此问题影响。 我们使用的是 Delphi 6 Prof,因此属性不适用于默认表单。
有人说消息对话框可以用 MessageBox + MB_APPLMODAL 控制。 这是个好消息,但我们有许多旧的表单和组件、第三方工具。
因此,通过替换表单来制作一个全新的应用程序是一项艰巨的工作。
但我们会尝试这样做。
我认为答案是这一半是应用程序问题,一半是 Windows 问题。如果 Windows 有时处理此问题,有时不处理 - 这似乎是 Windows 错误。 但是,如果我们可以强制生成良好的模态窗口,那么它就是一个编程错误。
有人可以向我解释 WS_POPUP 标志的含义吗? 有没有副作用?
感谢: dd
最佳答案
这就是 PopupMode
and PopupParent
properties 的内容是为了。
例如,您可以:
Dialog1.PopupMode := pmExplicit;
Dialog1.PopupParent := self;
Dialog1.ShowModal;
这会告诉 Windows 正确的 Z 顺序。
关于windows - Delphi - 如何防止 Forms/MsgBoxes 在先前的表单下移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997079/