TSaveDialog 和 2 种具有相同扩展名的格式

TSaveDialog and 2 formats with same extension

在 TSaveDialog 中我添加了 2 种具有相同扩展名的格式:

Format A|*.form
Format B|*.form
Format C|*.diff

现在我想确定用户选择了哪种格式:

var Ext: String;
begin
  if not SaveDialog1.Execute then Exit;

  Ext := LowerCase(ExtractFileExt(SaveDialog1.FileName));

这样我可以区分 "Format B" 和 "Format C" 但我不能 "Format A" 和 "Format B".

使用 FilterIndex 属性 确定在操作对话框时选择了哪个过滤器。

虽然 David 的回答与提出的问题直接相关,但在确定用户意图时还有更多需要考虑的因素。您不一定仅依靠文件扩展名来了解用户想要做什么。毕竟,用户可以自己手动将 .form 键入文件名,然后你应该怎么做?

相反,此类选项不应在此级别上实施。以我的经验,这些事情是在中级水平上实施的。例如,考虑视频编辑/制作。用户可能希望将视频呈现为 MP4 视频。或者可能是 AVI。但是,这些可能的格式中的每一种都有各种其他特定选项,例如视频编解码器、质量等。

在这种情况下需要做的是在保存文件之前提供额外的用户选项层。在某种意义上让它成为 "project" 的一部分。用户对他们的内容做他们需要做的事情,这个过程的一部分是决定他们打算产生什么类型的输出格式。当用户决定保存时,在提示他们输入文件名之前,首先提示他们输入其他特定格式选项,具体取决于您的应用程序支持的格式。

长话短说,不要依赖文件扩展名本身来识别用户的所有意图。在选择输出扩展名之前,应该有一个中间级别的用户选择文件应该如何格式化。