SavePictureDialog.FileName setzt vermutlich nur den Dateinamen im
OpenFileName-Record, man müßte aber den Text des Edits ändern.
Man könnte jetzt einen
ExplorerHook einrichten ... dort bekommt man alles genau mit, und kannn an vielen Stellen eingreifen,
oder das
Handle des Edits suchen und via
WinAPI die Änderung vornehmen.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
SavePictureDialog1.Filter := 'JPEG Image File (*.jpg)|*.jpg|GIF Image File (*.gif)|*.gif|Bitmap (*.bmp)|*.bmp';
SavePictureDialog1.Execute;
end;
procedure TForm1.OpenPictureDialog1TypeChange(Sender: TObject);
const
// damit man nicht die Endung aus .Filters rausbekommen muß
Filters: Array[1..3] of String = ('.jpg', '.gif', '.bmp');
var
H: HWND;
S, S2: String;
begin
H := TSavePictureDialog(Sender).Handle;
H := GetWindowLong(H, GWL_HWNDPARENT); // get real Window
H := GetDlgItem(H, 1148); // get ComboBoxEx32 (entspricht dem "DateinameEdit")
H := GetDlgItem(H, 1148); // get ComboBox (Teil der ComboBoxEx32 )
H := GetDlgItem(H, 1148); // get Edit (Teil der ComboBox)
SetLength(S, GetWindowTextLength(H));
GetWindowText(H, PChar(S), Length(S));
S2 := Filters[TSavePictureDialog(Sender).FilterIndex];
S := ChangeFileExt(S, S2) + IntToStr(TOpenPictureDialog(Sender).FilterIndex);
SetWindowText(H, PChar(S));
end;
// entspricht diesem
//begin
// S := TSavePictureDialog(Sender).FileName;
// S2 := Filters[TSavePictureDialog(Sender).FilterIndex];
// S := ChangeFileExt(S, S2);
// TSavePictureDialog(Sender).FileName := S;
//end;
Achtung: dieser Code läuft nur, wenn der Dialog im neuen Explorer-Style angezeigt wird.
Delphi verwendet diesen Standardmäßig, aber unter
Win9x und wenn der neue Style explizit im System deaktiviert ist, dann geht es nicht, da der alte Dialog anders aufgebaut ist. (z.B. DateiEdit ist wirklich ein Edit und keine ComboBox)