在 OS X 中打开文件

Open file in OS X

在Delphi中,我想在OSX中打开一个文件,我的做法是:

const
  Filename = 'test.bmp';

procedure SaveAndOpen;
begin
  Chart.SaveToBitmapFile(Filename);
  {$IFDEF MSWINDOWS}
  ShellExecute(0, 'open', Filename, '', '', SW_Normal);
  {$ELSE}
  _System(Filename);
  {$ENDIF}
end;

但是没有任何反应。我做错了什么?

你必须像这样添加 open 动词

_System(PAnsiChar('open ' + Filename));

这篇来自 Embarcadero 的 Malcolm Groves 的文章涵盖了这个主题:Opening files and URLs in default applications in OS X

综上所述,您只需要:

uses
  Macapi.Appkit,       // for NSWorkspace
  Macapi.Foundation;   // for NSSTR
....
var
  Workspace: NSWorkspace; // interface, no need for explicit destruction
....
Workspace := TNSWorkspace.Create;
Workspace.openFile(NSSTR(FileName));

为了完整起见,如果您希望打开 URL 而不是文件,那么您可以调用 openURL

Workspace.openURL(NSSTR(URL));

关于您的 Windows 代码,我建议不要使用 ShellExecute。该功能没有合理的错误报告。使用 ShellExecuteEx 代替。

最后,您可能应该将此功能抽象化,以便程序的其他部分可以重新使用它。您想尽可能少地写 IFDEF