Firemonkey MacOS应用程序 - 关闭vs退出

时间:2015-11-24 20:13:32

标签: delphi firemonkey delphi-xe8

我使用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中的应用程序并选择退出,如果表单尚未最小化,应用程序将被最小化。因此,用户应单击退出两次以真正关闭应用程序。

有什么方法可以解决这个问题吗?关闭按钮应隐藏/最小化窗口,Quit应终止应用程序。

2 个答案:

答案 0 :(得分:1)

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

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;

答案 1 :(得分:0)

行为不同。

  • 关闭&#34; MainForm&#34;将终止申请
  • 关闭&#34; SubForm&#34;将关闭该表格

您只是在多个文档应用程序上看到MacOS上的这种行为(与Windows中已知的MDI相当)。