我正在開發面向Mac OS和Windows的Delphi XE2應用程序。我想要集成到上下文菜單中。對於Windows來說,這是一件簡單的事但對於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
<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>
當在Mac OS上應用hungs運行此有時用「崩潰總線錯誤「異常。
任何人都可以幫助解決這個問題嗎?
或者Delphi XE2不支持這種功能?
相關問題假設您使用Cocoa + ObjectiveC,可以使用DelphiXE2/Firemonkey調用基於cocoa/objectiveC消息的API來調整:http://stackoverflow.com/questions/9420361/add-an-item -in-finders-contextual-menu-with-cocoa - 我會試圖用Cocoa/ObjectiveC編寫整個製作服務位,然後找到一種方法,然後從你的delphi應用程序簡單地調用本地的objectiveC共享庫。 –
我認爲如果它是可行的,你會在免費的pascal文檔或論壇中找到它,因爲XE2使用免費的pascal for OSX。由於免費的pascal已經在OSX上很長時間了,我相信它會比Delphi論壇更多。 – adrianj98