【问题标题】:Firemonkey MacOS app - Close vs QuitFiremonkey MacOS 应用程序 - 关闭与退出
【发布时间】:2015-11-24 20:13:31
【问题描述】:

我使用 Firemonkey XE8 开发了一个 MacOS 应用程序,我注意到主窗体的 X 按钮实际上终止了应用程序,而不是隐藏/最小化它,因为它是大多数 MacOS 应用程序的默认行为。

为了解决这个问题,我在 FormCloseQuery 中添加了以下逻辑,以在有人单击 X 按钮时最小化应用程序:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin


{$IFDEF MACOS}
 if (Self.WindowState<>TWindowState.wsMinimized) then begin
  Self.WindowState:=TWindowState.wsMinimized;
  CanClose:=false;
 end
 else
  CanClose:=true;
{$ENDIF MACOS}


end;

这可行,但副作用是如果有人右键单击 Dock 中的应用程序并选择退出,如果表单尚未最小化,则应用程序将被最小化。所以用户应该点击退出两次才能真正关闭应用程序。

有没有办法解决这个问题?关闭按钮应隐藏/最小化窗口,退出应终止应用程序。

【问题讨论】:

    标签: delphi firemonkey delphi-xe8


    【解决方案1】:

    我没有苹果电脑,但我已经在 Windows 上测试过这段代码,它可以工作。 (XE2 FM 应用)

    uses
      fmx.platform
    
    procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     var
      p:TPointF;
    begin
      p := Platform.GetMousePos;
      p := ScreenToClient(p);
    
      if p.Y > 0 then
        CanClose := True
      else
        begin
         Self.WindowState:=TWindowState.wsMinimized;
         CanClose:=false;
        end;
    end;
    

    【讨论】:

    • 为了在 XE8 中获得鼠标位置,我使用 Screen.MousePos 而不是 Platform.GetMousePos。谢谢!
    【解决方案2】:

    行为没有不同。

    • 关闭“MainForm”将终止应用程序
    • 关闭“子表单”只会关闭该表单

    您只是从 多文档应用程序(类似于 Windows 已知的 MDI)中注意到 MacOS 上的这种行为。

    【讨论】:

    • 我认为即使是 MainForm 也不应该关闭应用程序。当您关闭主窗体时,只有小型实用程序会关闭,而例如包含的“邮件”程序不会关闭。 Mail 程序不是一个多文档应用程序,因为多次打开同一个邮件文件夹列表是没有目的的。
    • 在某种程度上邮件也是。您可以在 Mail 中打开新的 Windows 以获得邮箱上的不同视图。所以这里的行为和多文档是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    相关资源
    最近更新 更多