Как добавить пункт меню в Mac OS Finder в Delphi XE2

Я работаю над приложением Delphi XE2 для Mac OS и Windows. И я хочу иметь интеграцию в контекстное меню. Для окон это простая задача. Но для Mac OS я не знаю, как это сделать.

Я прочитал документацию Предоставление услуг и пробовал аналогичный код в 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

NSServices

  
     NSKeyEquivalent
     
         default
         e
     
     NSMenuItem
     
         default
         App/Message
     
     NSMessage
     simpleMesage
     NSPortName
     App            
  

При запуске в Mac OS приложение зависает и иногда вылетает с исключением «Ошибка шины».

Кто-нибудь может помочь с этой проблемой?

Или, может быть, Delphi XE2 не поддерживает такую ​​функциональность?

31
задан David Heffernan 4 November 2011 в 17:06
поделиться