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

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

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

我不知道这是否很难实现,但是我没有在Google上找到它。
这是我的简单演示代码:

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;


在非Windows上也可以使用Form事件WindowStateChange

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

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

10-13 08:33