Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

Re: Dialog Dateierweiterung anpassen

  Alt 7. Mai 2008, 12:17
SavePictureDialog.FileName setzt vermutlich nur den Dateinamen im MSDN-Library durchsuchenOpenFileName-Record, man müßte aber den Text des Edits ändern.

Man könnte jetzt einen MSDN-Library durchsuchenExplorerHook 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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat