TSaveDialog и 2 формата с одинаковым расширением - PullRequest
5 голосов
/ 28 октября 2019

В 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));

Таким образом, я могу различать "Формат B"из" Формат C ", но я не могу" Формат A "из" Формат B ".

Ответы [ 2 ]

7 голосов
/ 28 октября 2019

Используйте свойство FilterIndex, чтобы определить, какой фильтр был выбран, когда диалоговое окно было выполнено.

5 голосов
/ 29 октября 2019

Несмотря на то, что ответ Дэвида напрямую связан с вопросом, который он задает, при определении намерений пользователя необходимо учесть больше. Вы не можете полагаться только на расширение файла, чтобы знать, что пользователь хочет сделать. В конце концов, пользователь мог бы вручную ввести .form в имя файла, и что тогда вам следует делать?

Вместо этого такие опции не должны быть реализованы на этом уровне. По моему опыту, такие вещи реализованы на промежуточном уровне. Например, подумайте о редактировании / производстве видео. Пользователь может пожелать отобразить видео как MP4 видео. Или возможно AVI. Однако каждый из этих возможных форматов имеет множество других специфических опций, таких как видеокодеки, качество и многое другое.

Что необходимо сделать в подобных ситуациях, это предоставить дополнительный уровень пользовательских опций перед сохранением файла. Пусть это будет частью "проекта" в некотором смысле. Пользователь делает то, что ему нужно, со своим контентом, и часть процесса решает, какой тип выходного формата он намеревается создать. Когда пользователь решает сохранить, прежде чем запрашивать их в качестве имени файла, сначала запросите у них другие конкретные параметры формата, в зависимости от того, какие форматы поддерживает ваше приложение.

Короче говоря, не полагайтесь на само расширение файла, чтобы определить все намерения пользователя. Перед выбором выходного расширения должен быть промежуточный уровень выбора пользователя для форматирования файла.

...