FireMonkey/Rad Studio XE2:如何在OS X上显示SaveDialog过滤器?

Zol*_*ati 8 delphi macos delphi-xe2 firemonkey

我创建了一个(Delphi XE2)Firemonkey示例程序,它包含一个TButton和一个带有两个不同过滤器的TSavedialog.(TSaveDialog组件支持Win32/Win64和OS X平台.)

它在Win32/Win64上工作正常,但我现在不知道为什么它不显示OS X上的Savedialog过滤器(VirtualBox/OS X 10.7.x).

如何让它在OS X上运行?

procedure TForm1.Button_SaveClick(Sender: TObject);
begin
  SaveDialog.Filter:='Format_1 (*.fmt1)|*.fmt1|Format_2 (*.fmt2)|*.fmt2';

  If Savedialog.Execute Then ShowMessage(SaveDialog.FileName+#13+'Selected filterindex: '+Inttostr(SaveDialog.FilterIndex));
end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*ers 3

Save 对话框不是在 Delphi 中构建的,而是调用本机 MAC OSX 对话框 (NSSavePanel)。这没有用户可选择的过滤器。

当您执行保存对话框时,Delphi 将过滤器作为数组传递给 NSSavePanel.SetAllowedFileTypes,它确定 OSX 对话框将允许用户指定哪些扩展名 - 但没有可选择的列表。

要允许用户从列表中进行选择,您需要创建自己的文件类型选择对话框,然后将该选择传递到保存的对话框作为默认文件类型和唯一的过滤项。

创建全新的 fileSave 对话框的替代方案并不容易,因为 Firemonkey 树组件似乎坚持扩展其所有节点,因此对硬盘驱动器上的所有文件执行完整的遍历。无论如何,MAC 用户都会熟悉标准对话框。