При отображении диалогового окна сохранения я хочу автоматически отслеживать изменение типа фильтра пользователя и изменять расширение файла. (например, как операция 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 ...