保存ダイアログを表示しながら、ユーザーのフィルタータイプの変更をフックし、ファイル拡張子を自動的に変更したい。(たとえば、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と、Delphi2007でのvista/7の両方をサポートしたいと思います。
内部ラッパーでTSaveDialogの代わりにTFileSaveDialogを使用する必要がありますか?(そして、 IFileDialogControlEventsを使用したCOMプログラミングに苦労する必要がありますか?)
または、TFileSaveDialogを使用してこれを実現できますか?それは標準のプロパティのみですか?(私の開発環境はまだXPマシン上にあるので、試したことはありません。申し訳ありません。)
非常に一般的な作業だと思いますが、Vista/7をサポートするサンプルコードが見つかりませんでした...