TSaveDialog и 2 формата с одинаковым расширением
В 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 ответа
Использовать FilterIndex
свойство, чтобы определить, какой фильтр был выбран при открытии диалогового окна.
Хотя ответ Дэвида напрямую относится к поставленному вопросу, при определении намерений пользователя следует учитывать еще кое-что. Вы не всегда можете полагаться только на расширение файла, чтобы знать, что хочет сделать пользователь. В конце концов, пользователь мог вручную ввести.form
в само имя файла, и что тогда делать?
Напротив, такие варианты не должны реализовываться на этом уровне. По моему опыту, такие вещи реализуются на среднем уровне. Например, подумайте о редактировании / производстве видео. Пользователь может пожелать отобразить видео какMP4
видео. Или, возможно,AVI
. Однако каждый из этих возможных форматов имеет множество других конкретных параметров, таких как видеокодеки, качество и многое другое.
Что необходимо сделать в подобных ситуациях, так это предоставить дополнительный уровень пользовательских опций перед сохранением файла. Пусть это будет в некотором смысле частью "проекта". Пользователь делает со своим контентом то, что ему нужно, и часть процесса решает, какой тип выходного формата они намереваются создать. Когда пользователь решает сохранить, прежде чем запрашивать имя файла, сначала попросите его указать другие конкретные параметры формата, в зависимости от того, какие форматы поддерживает ваше приложение.
Короче говоря, не полагайтесь на само расширение файла, чтобы определить все намерения пользователя. Перед выбором выходного расширения должен быть промежуточный уровень выбора пользователем способа форматирования файла.