在 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
。
在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
。