如何在Delphi macOS应用中检测暗黑模式

3

如何在 Delphi FireMonkey macOS 应用程序中检测暗黑模式(例如 Big Sur)?

1个回答

2

您可以使用FireMonkey平台服务获取该信息:

uses
  FMX.Platform;

function GetSystemTheme: TSystemThemeKind;
var
  LService: IFMXSystemAppearanceService;
begin
  Result := TSystemThemeKind.Unspecified;
  if TPlatformServices.Current.SupportsPlatformService(IFMXSystemAppearanceService, LService) then
    Result := LService.GetSystemThemeKind;
end;

TSystemThemeKind声明的位置如下:

TSystemThemeKind = (Unspecified, Light, Dark); 

IFMXSystemAppearanceService 目前支持 Android、iOS 和 macOS。


哇,谢谢。如果我们想要自动返回程序?我们该怎么做? - ayoub barari
你的意思是把上面的代码放在函数里吗?是的,你可以很容易地这样做。我修改了这个例子。 - Dalija Prasnikar
那么现在它是否也支持Windows呢?否则,可以使用https://blogs.embarcadero.com/easily-customize-your-delphi-vcl-application-with-dark-and-light-themes-according-to-windows-mode/添加特定于平台的实现。 - George Birbilis
@GeorgeBirbilis 在 Delphi 11.1 中,FMX 仍不支持此功能,该博客文章讨论的是 VCL 应用程序。在 Quality Portal 中有一个功能请求,您可以为其投票 https://quality.embarcadero.com/browse/RSP-37290 - Dalija Prasnikar
我猜这个示例是否为VCL并不重要,主要信息是注册表键,通过它可以获取该信息。因此,可以为Windows添加该平台服务的实现。如果有时间,我可以尝试一下并为Embarcadero做出贡献。 - George Birbilis
这也适用于重用检测代码:https://blogs.embarcadero.com/modernize-your-app-are-you-handling-windows-themes-correctly/ - 提到了DarkMode库。还要注意,有一个Windows消息可以检测更改,可以使用它。不确定FMX服务是否也支持实时响应光/暗模式的更改或仅支持查询状态。 - George Birbilis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接