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

Tom*_*Tom 5 delphi save-dialog tsavedialog

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

Format A|*.form
Format B|*.form
Format C|*.diff
Run Code Online (Sandbox Code Playgroud)

现在,我要确定用户选择的格式:

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

  Ext := LowerCase(ExtractFileExt(SaveDialog1.FileName));
Run Code Online (Sandbox Code Playgroud)

这样我可以将“格式B”与“格式C”区分开来,但不能将“格式A”与“格式B”区分开。

Dav*_*nan 7

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

  • 有趣的是,该属性似乎基于“ 1”而不是基于“ 0”。有点奇怪。 (3认同)
  • @JerryDodge它直接反映了[OPENFILENAME]的基础winapi`nFilterIndex`字段(https://docs.microsoft.com/zh-CN/g/windows/win32/api/commdlg/ns-commdlg-openfilenamea) (3认同)

Jer*_*dge 5

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

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

在这种情况下,需要做的是保存文件之前提供另一层用户选项。从某种意义上说,使其成为“项目”的一部分。用户会根据自己的内容做他们需要做的事情,过程的一部分是确定他们打算产生哪种类型的输出格式。当用户决定保存时,在提示他们输入文件名之前,首先提示他们输入其他特定格式的选项,具体取决于应用程序支持的格式。

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