我的应用程序有几种MDI形式,其中一种是具有详细信息的子模式形式。因此,当我从MDI表单中打开此模式表单时,单击“浏览”按钮并创建OpenFileDialog。一切正常,除非我按了ALT + TAB。当我按ALT + TAB键,然后按ALT + TAB键回到我的应用程序时,我看到OpenFileDialog(也是消息框)在我的模态窗口后面,但在MDI窗口的前面。没有StayOnTop或类似的东西。将OpenDialog带回所有窗口的唯一方法是在应用程序中添加第二个ALT + TAB。这将导致Dialog在所有其他窗口的前面弹出。
我该怎么做才能防止Dialog隐藏在我的Modal表单后面?有什么建议吗?
我使用的是delphi7,不能使用更高的版本
我假设该问题与窗口所有权有关。在Delphi 7中,文件对话框将隐藏的应用程序窗口作为其窗口所有者。但是窗口所有者确实需要成为活动表单的窗口。
有很多方法可以解决此问题,但最简单的方法是像这样子化TOpenDialog
并覆盖它TaskModalDialog
:
function TMyOpenDialog.TaskModalDialog(DialogFunc: Pointer;
var DialogData): LongBool;
var
hwndOwner: HWND;
begin
hwndOwner := Screen.ActiveForm.Handle;
if hwndOwner = 0 then
hwndOwner := Application.MainForm.Handle;
if hwndOwner = 0 then
hwndOwner := Application.Handle;
TOpenFilename(DialogData).hwndOwner := hwndOwner;
Result := inherited TaskModalDialog(DialogFunc, DialogData);
end;
我没有手头的Delphi 7对此进行测试,但是我有足够的信心相信按照这些思路(可能会有所hwndOwner
选择)进行一些整理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句