如何停止在 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 单元(以便它们'也重新编译),由于这个问题:
我找到了解决方案,
改变这个功能
function TMacWindowHandle.GetScale: Single;
begin
//Result := Wnd.backingScaleFactor
result := 1;
end;
将解决这个问题:)
我使用 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 单元(以便它们'也重新编译),由于这个问题:
我找到了解决方案,
改变这个功能
function TMacWindowHandle.GetScale: Single;
begin
//Result := Wnd.backingScaleFactor
result := 1;
end;
将解决这个问题:)