delphi - 子窗体总是在父窗体之上

标签 delphi

我认为这是一次又一次出现在这里的问题,但是我查看了很多问题,并没有找到适合我的正确答案。

我有一个父表单,具有所有“正常”属性,现在我刚刚创建了一个子表单,也具有“正常”属性。在我的父窗体上,我有一个 ListView,当我单击 ListView 上的某个项目时,我会打开子窗体。

现在我需要将这个子窗体保留在主窗体的顶部,当我最小化子窗体时,顶部也会最小化,当我最大化程序时,我只看到子窗体,直到我关闭这个窗体。因此,在我关闭子窗体之前,带有 ListView 的主窗体将不可用。如果我从 ListView 中选择另一个项目,我会以相同的行为再次打开子窗体。

我不知道这是否很难实现,但我没有通过谷歌找到它。
这是我的简单演示代码:

unit Unit1;

var
  Form1: TForm1;


implementation

uses Desktop;

procedure TForm1.RemoteDesktop1Click(Sender: TObject);
var
  DesktopForm: TForm2;
begin
  DesktopForm:= TForm2.Create(Self);
  DesktopForm.Show;
end;

而桌面单元只是一个 VCL 表单,没有任何代码。

最佳答案

使用showModal .要最小化 MainWindow(所有窗口,实际上是最小化应用程序),您应该在子窗体中覆盖 WMSysCommand:

procedure WMSyscommand(var Msg: TWmSysCommand); message WM_SYSCOMMAND;

.
.
.
procedure TForm2.WMSysCommand(var Msg: TWmSysCommand);
begin
  case (Msg.CmdType and $FFF0) of
    SC_MINIMIZE:  begin
                    Msg.Result := 0;
                    EnableWindow(Application.Handle, True);
                    Aplication.Minimize;
                  end;
    else inherited;
  end;
end;

也形成事件WindowStateChange可以在非 Windows 上使用。

我在 LXDE Fedora23 (Lazarus) 上运行了简单的测试,没有处理该事件,所有表单在模态时都已最小化。

关于delphi - 子窗体总是在父窗体之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244713/

相关文章:

delphi - 使用Delphi 2007在运行时将IXMLDOMDocument3保存到xml文件中

delphi - ini 文件部分到 stringgrid

string - 如何比较两个(非零终止)字符数组

multithreading - 两个线程读取同一内存块的不同区域是否安全?

delphi - 检测过时的互斥体

delphi - 如何调整任何类型图像的大小?

德尔福泛型 : cannot cast class and constructor constrained generic type to an interface

c - 从 C 语言翻译成 Delphi : struct fields align

delphi - 为什么我仅在 HTTPS (SSL) 网站上使用 Indy 时才收到 "Connection reset by peer"?

android - Delphi AndroidAPI 运动检测