FireMonkey と macOS
前回は、Windows について Window Handle を使う方法を紹介しました。
Windows では、Window Handle が重要ということでした。
macOS に依存した処理をする
Windows と違って macOS は構造化された API のため基本的にはハンドルではなくクラスのメソッドを使って OS の機能を呼び出します。
TMacWindowHandle
前回同様、WindowHandleToPlatform 関数を使います(定義されている unit は FMX.Platform.Mac になります)。
TMacWindowHandle クラスのインスタンスが返ってくるので、そのプロパティ Wnd で NSWindow のインスタンスが返ってきます。
ここまでをコードにすると…
function GetWnd(const iForm: TCommonCustomForm): NSWindow;
begin
Result := WindowHandleToPlatform(AHandle).Wnd;
Result.Foo() // NSWindow に定義されているメソッドを呼べます
end;
と、こんな感じで呼び出せます。
Windows と違って NSWindow が取れるので、もうこれだけで直接色々できます。
まとめ
WindowHandleToPlatform を使うと NSWindow が取れます。
おまけ
NSApplication のインスタンスも取得できます。
NSApp := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication);