При показе диалогового окна сохранения я хочу сцепить расширение файла изменения и изменения типа фильтра пользователя автоматически. (например, как операция "Сохранить Как" MSPAINT.)
С TSaveDialog и установкой UseLatestCommonDialogs: = Ложь, я могу обработать это следующим кодом. (без последней поддержки стандартного диалога, курса.)
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 и перспективу/7 с Delphi 2007.
Я должен использовать TFileSaveDialog вместо TSaveDialog с внутренней оберткой? (И я должен бороться с COM, программирующим использование IFileDialogControlEvents?)
Или я могу достигнуть этого с TFileSaveDialog, и это - стандартные свойства только? (Моя среда разработки находится все еще на машине XP, таким образом, я никогда не пробовал. извините.)
Я думаю, что это - очень общая задача, но я не мог найти пример кода, поддерживающий Vista/7...
Насколько я знаю, TFILESAVEDialog поднимет исключение на XP. Это нужна Vista или вверх.
Обновление : Некоторые код D2010 для TFILESAVEDialog адаптированы из вашего обработчика событий ....
(У меня нет D2007 на Vista; используйте PwideChar вместо PCHAR)
procedure TForm1.FileSaveDialog1TypeChange(Sender: TObject);
var
FName, Ext: string;
pName: PChar;
begin
with TFileSaveDialog(Sender) do
begin
if DirectoryExists(FileName) then // FileName is Empty
exit;
case FileTypeIndex of
1: Ext := '.png';
2: Ext := '.bmp';
3: Ext := '.jpg';
end;
Dialog.GetFileName(pName);
FName := ChangeFileExt(ExtractFileName(pName), Ext);
Dialog.SetFileName(PChar(FName));
end;
end;
, где файловыйavedialog:
object FileSaveDialog1: TFileSaveDialog
FavoriteLinks = <>
FileTypes = <
item
DisplayName = 'png files'
FileMask = '*.png'
end
item
DisplayName = 'bmp files'
FileMask = '*.bmp'
end
item
DisplayName = 'jpg files'
FileMask = '*.jpg'
end>
Options = []
OnTypeChange = FileSaveDialog1TypeChange
end