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

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

如何在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;

最佳答案

“保存”对话框不是在Delphi中构建的,而是调用 native MAC OSX对话框(NSSavePanel)。它没有用户可选的过滤器。

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

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

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

10-08 05:41