gpt4 book ai didi

delphi - OpenDialog 在 alt+tab 上位于模态窗口后面

转载 作者:行者123 更新时间:2023-12-03 02:25:59 26 4
gpt4 key购买 nike

我的应用程序有多个 MDI 表单,其中一个表单具有包含详细信息的子模式表单。因此,当我从 MDI 表单打开此模式表单时,我单击“浏览”按钮并创建 OpenFileDialog。一切正常,除了当我按 ALT+TAB 时。当我按 ALT+TAB 然后按 ALT+TAB 返回到我的应用程序时,我看到 OpenFileDialog(也是消息框)位于我的模式窗口后面,但在 MDI 窗口前面。没有 StayOnTop 或类似的东西。将 OpenDialog 恢复到所有窗口前面的唯一方法是在我的应用程序中使用第二个 ALT+TAB。这会导致对话框在所有其他窗口前面弹出。

我可以做些什么来防止对话框隐藏在我的模态表单后面?有什么建议吗?

我使用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 选择进行一些调整)会解决这个问题。

关于delphi - OpenDialog 在 alt+tab 上位于模态窗口后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17831523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com