如何从 Firemonkey 中的文件加载自定义光标以用于 Mac 应用程序?

How to load a custom cursor from file in Firemonkey to be used on a Mac app?

我想从文件(或任何其他方式)加载自定义光标以用于我的 FireMonkey 应用程序。我知道我想按照 here 所述使用 IFMXCursorService 并编写我自己的 class 来实现 IFMXCursorService 接口:SetCursor/GetCursor。问题是我想为 Mac 构建应用程序,所以我不能像我发现的所有示例(LoadCursorFromFile 等)那样使用对 Windows API 的任何调用。所以:

1) 有没有办法不使用 Windows API 从文件加载游标?

2) 如果有办法:实现可以 "adjusted" 使用编译器指令在同一个单元上实现 Windows 和 Mac 所以我可以分别为 Windows 和 Mac 构建应用程序

PS:我正在使用 Delphi 10.2.3(东京)

1) 在 macOS 上?绝对:

function LoadNSImage(const AFileName: string): NSImage;
var
  LStream: TMemoryStream;
  LData: NSData;
begin
  LStream := TMemoryStream.Create;
  try
    LStream.LoadFromFile(AFileName);
    LData := TNSData.Wrap(TNSData.OCClass.dataWithBytes(LStream.Memory, LStream.size));
    Result := TNSImage.Wrap(TNSImage.Create.initWithData(Data));
  finally
    LStream.Free;
  end;
end;

在调用 initWithImage 的 NSCursor 中使用生成的 NSImage:

https://developer.apple.com/documentation/appkit/nscursor/1524612-initwithimage?language=objc

2) 除了使用确定编译哪些代码的指令之外,没有其他方法可以支持多个平台。在这种情况下,您需要为每个实现 IFMXCursorService 的平台提供 class,并且您需要为需要使用的平台提供 "override" Delphi 的默认实现通过调用 TPlatformServices.Current.RemovePlatformService 删除现有实现和相应的 AddPlatformService 方法来添加您自己的实现。

这里不打算详细介绍 1) 或 2);在做一些研究并先自己尝试之后,你真的应该为你遇到的每个问题写单独的问题。