Help us understand the problem. What is going on with this article?

FireMonkey と macOS

More than 3 years have passed since last update.

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);
pik
シリアルゲームズ取締役 エンバカデロ・テクノロジーズ Delphi MVP Delphi で iOS / Android / Windows / macOS / Linux のアプリを作ったりしてるみたい。 たまに C#, .NET, Unity も使ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away