Mac OSとWindowsを対象としたDelphi XE2アプリケーションを開発中です。コンテキストメニューに統合したいと思っています。ウィンドウの場合、これは簡単な作業です。しかし、Mac OSでは、これを行う方法はわかりません。Delphi XE2のMac OS Finderにメニュー項目を追加する方法
私はProviding a Serviceのドキュメントを読んだことがありますが、Delphiでは同様のコードを試しましたが、運がないとしました。
Finderの統合トライアルの簡単なコードを見てください。
App.dpr
program App;
uses
SysUtils,
{$IFDEF MACOS}
AppKit, CocoaTypes, CoreFoundation,
CoreServices, Foundation, Mach, ObjCRuntime,
ObjectiveC, OCMarshal, OpenGL, QuartzCore, Security,
SystemConfiguration,
{$ENDIF}
MessageProvider;
{$IFDEF MACOS}
var
app: NSApplication;
provider: TMessageProvider;
{$ENDIF}
begin
Application.Initialize;
{$IFDEF MACOS}
provider := TMessageProvider.Create();
app := TNSApplication.Alloc();
app.setServicesProvider(provider);
{$ENDIF}
Application.CreateForm(TFormOSVersion, FormOSVersion);
Application.Run;
end.
MessageProvider.pas
unit MessageProvider;
interface
uses
FMX.Dialogs
{$IFDEF MACOS}
, AppKit, CocoaTypes, CoreFoundation,
CoreServices, Foundation, Mach, ObjCRuntime,
ObjectiveC, OCMarshal, OpenGL, QuartzCore, Security,
SystemConfiguration
{$ENDIF}
;
type
TMessageProvider = class
public
procedure simpleMessage(var userData: string; var error: string);
end;
implementation
procedure TMessageProvider.simpleMessage(var userData: string; var error: string);
begin
ShowMessage('Simple message from service.');
error := '';
end;
end.
追加の構成はのInfo.plistするMac OSのアプリケーションhungsでこれを実行し、時には 'でクラッシュ
<key>NSServices</key>
<array>
<dict>
<key>NSKeyEquivalent</key>
<dict>
<key>default</key>
<string>e</string>
</dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>App/Message</string>
</dict>
<key>NSMessage</key>
<string>simpleMesage</string>
<key>NSPortName</key>
<string>App</string>
</dict>
</array>
バスエラー '例外が発生します。
誰でもこの問題を解決できますか?
または、おそらくDelphi XE2はこの種の機能をサポートしていませんか?
関連する質問Cocoa + ObjectiveCを使用していると仮定して、DelphiXE2/Firemonkeyを使用して、ココア/オブジェクトCメッセージベースのAPIを呼び出すことができます。http://stackoverflow.com/questions/9420361/add-an-item -infinders-contextual-menu-with-cocoa - 私は、Cocoa/ObjectiveCを使用して全体の制作サービスのビットを書いて、あなたのdelphiアプリからそのネイティブなobjectiveC共有ライブラリを単に呼び出す方法を見つけようとします。 –
XE2はOSX用のフリーパスカルを使用しているため、実行可能であれば、無料のパスカルのドキュメントやフォーラムで見つけることができます。そして、フリーパスカルはOSX上でずっとずっと続いていたので、私はそれがDelphiフォーラム以上のものになると確信しています。 – adrianj98