При отображении диалогового окна сохранения я хочу подключить изменение типа фильтра пользователя и автоматически изменить расширение файла. (например, как операция MSPaint «Сохранить как».)
С TSaveDialog и установкой UseLatestCommonDialogs: = False,
Я могу справиться с этим с помощью следующего кода. (без поддержки последних общих диалогов, конечно.)
procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
FName, Ext: string;
begin
with TSaveDialog(Sender) do
begin
if DirectoryExists(FileName) then // FileName is Empty
exit;
case FilterIndex of
1: Ext := '.png';
2: Ext := '.bmp';
3: Ext := '.jpg';
end;
FName := ChangeFileExt(ExtractFileName(FileName), Ext);
SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
end;
end;
Я хочу поддерживать и XP, и Vista / 7 с Delphi 2007.
Должен ли я использовать TFileSaveDialog вместо TSaveDialog с внутренней оболочкой?
(И мне приходится бороться с COM-программированием, используя IFileDialogControlEvents ?)
Или я могу добиться этого с помощью TFileSaveDialog и только его стандартных свойств?
(Моя среда разработки все еще работает на компьютере с XP, поэтому я никогда не пробовал. Извините.)
Я думаю, что это очень распространенная задача, но я не смог найти пример кода, поддерживающего Vista / 7 ...