代码之家  ›  专栏  ›  技术社区  ›  user1580348

问题:如何在上次最小化后还原应用程序?

  •  1
  • user1580348  · 技术社区  · 6 月前

    在Windows 11中,Delphi 12.1,我有一个简单的Delphi VCL应用程序,只有一个按钮:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Application.Minimize;
      ShowMessage('Test');
      Application.Restore;
    end;
    

    很遗憾,申请表没有恢复。只有在单击任务栏图标后,表单才会恢复。

    如何在执行以下操作后以编程方式还原表单 ShowMessage 打电话?

    编辑:

    与此同时,我找到了一个非常简单的解决方案:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      //Application.Minimize;
      Application.MainForm.Visible := False;
    
      ShowMessage('Test');
    
      Application.MainForm.Visible := True;
      //Application.Restore;
    end;
    

    但是,当 显示留言 显示对话框。如何避免这种情况?

    1 回复  |  直到 6 月前
        1
  •  3
  •   Remy Lebeau    6 月前

    很遗憾,申请表没有恢复。只有在单击任务栏图标后,表单才会恢复。

    尝试使用表格 WindowState 改为:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.WindowState := wsMinimized;
      ShowMessage('Test');
      Self.WindowState := wsNormal;
    end;
    

    但是,当显示ShowMessage对话框时,任务栏图标会消失。

    这是因为 Application.MainFormOnTaskbar 默认情况下为True。您正在隐藏/显示拥有任务栏按钮的窗口,这就是为什么该按钮也会隐藏/显示的原因。

    如何避免这种情况?

    你必须设置 Application.MainFormOnTaskbar = False 大体上 .dpr 文件之前 Application.Run() 被称为。这将使 Application 窗口成为任务栏按钮的所有者。它还应该解决以下行为 Application.Minimize() / Application.Restore() 也是。

    然而,这样做将有效地使VCL的窗体窗口管理像Vista之前那样运行,这可能会导致Vista+中的其他副作用 MainFormOnTaskbar=True 旨在解决。所以要非常小心。

    另一种方法是简单地将窗体窗口移出屏幕,然后将其移回。

    与此同时,我找到了一个非常简单的解决方案

    您可以使用表格 Hide() Show() 方法改为:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.Hide;
      ShowMessage('Test');
      Self.Show;
    end;
    
    推荐文章