(Сохраните Диалоговое окно), Как изменить расширение файла автоматически на изменении фильтра файла в Vista/Win7?

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

8
задан kiamlaluno 23 June 2011 в 04:48
поделиться

1 ответ

Насколько я знаю, 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
5
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: