我正在开发面向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