如何停止在 ScaleChanged 消息中更改 firemonkey 中的样式

How can I stop changing style in firemonkey in ScaleChanged message

我使用 Firemokey 10.2。在 macOS 中,当您从普通显示器移动到 Retina 显示器时,它会自动更改控件的样式。我想停止此消息,即 TScaleChangedMessage。如果您能帮助我,我将不胜感激,我该如何在我的应用程序中停止这条消息。换句话说,我怎样才能停止从普通样式更改为高分辨率样式

最简单的方法是创建 FMX.Platform.Mac 单元的副本,并修改 TFMXWindow.windowDidChangeBackingProperties 方法,使消息永远不会发送,例如:

procedure TFMXWindow.windowDidChangeBackingProperties(notification: NSNotification);
begin
//  if (Application = nil) or (Application.Terminated) then
//    Exit;
//  try
//    TMessageManager.DefaultManager.SendMessage(nil, TScaleChangedMessage.Create(Wnd), True);
//  except
//    HandleException(Self);
//  end;
end;

即注释掉其中的所有内容

不幸的是,如果您使用的是 Delphi 10.2 Update 1,这意味着您需要在项目路径中包含 所有 FMX 单元(以便它们'也重新编译),由于这个问题:

https://quality.embarcadero.com/browse/RSP-18836

我找到了解决方案, 改变这个功能 function TMacWindowHandle.GetScale: Single; begin //Result := Wnd.backingScaleFactor result := 1; end; 将解决这个问题:)