![]() |
Filter im SaveDialog ansprechen
Hallo!
Im OnCreate Ereignis einer Form definiere ich die Filter für den SaveDialog:
Delphi-Quellcode:
anschließend rufe ich Datei speichern unter so auf:
SaveDialog1.Filter := 'Alle Dateien (*.*)|*.*;|Html Dateien (*.html; *.htm)|*.html; *.htm' +
'|Php Dateien (*.php; *.php3; *.php4; *.phtml; *.inc)|*.php;*.php3;*.php4;*.phtml;*.inc' + '|Cascading Stylesheets (*.css)|*.css' + '|Java Dateien (*.java)|*.java' + usw.....................
Delphi-Quellcode:
Wie kann ich nun, wenn der User den Filter im SaveDialog auswählt die Datei mit der entsprechenden
procedure TForm2.Speichernals1Click(Sender: TObject);
begin SaveDialog1.FileName := pfad; if SaveDialog1.Execute then begin Pfad := SaveDialog1.FileName; Caption := ExtractFileName(pfad); Speichern1Click(Sender) end; end; Endung speichern? :gruebel: |
Re: Filter im SaveDialog ansprechen
über Savedialog.FilterIndex kannst du herausfinden welches gewählt wurde (ist nicht 0-basierend sondern 1-basierend)
|
Re: Filter im SaveDialog ansprechen
Moin Grolle,
bei einem SaveDialog solltest Du nicht mehrere Endungen je Filter vorsehen. Du kannst es natürlich machen, hast dann aber das Problem, dass Du Dir von den gewählten Endungen eine aussuchen musst. |
Re: Filter im SaveDialog ansprechen
Aber wie kann ich dann anhand des FilterIndex eine
entsprechende Endung zuweisen? |
Re: Filter im SaveDialog ansprechen
So in etwa:
Delphi-Quellcode:
if FilterIndex = 1 then SaveToFile(pfad + '.html')
|
Re: Filter im SaveDialog ansprechen
Eine Case-Anweisung
Delphi-Quellcode:
wäre vermutlich besser. Das ChangeFileExt vermeidet fehlende, falsche oder doppelte Endungen.
Case SaveDialog.FilterIndex of
1 : Document.SaveToFile(ChangeFileExt(SaveDialog.FileName, '.html')); {...} End; Anstelle
Delphi-Quellcode:
würde ich
SaveDialog.FileName := Pfad;
Delphi-Quellcode:
nehmen.
SaveDialog.InitialDir := Pfad;
|
Re: Filter im SaveDialog ansprechen
Hi!
Habe es jetzt so gemacht. Allerdings speichert das Prog die Datei jetzt ganz ohne Endung?
Delphi-Quellcode:
Hilfeeeeeeeeeeee
procedure TForm2.Speichernals1Click(Sender: TObject); // Datei|Speichern als
begin SaveDialog1.FileName := pfad; if SaveDialog1.Execute then begin Pfad := SaveDialog1.FileName; Caption := ExtractFileName(pfad); case SaveDialog1.FilterIndex of 1 : begin ChangeFileExt(SaveDialog1.FileName,'.txt'); Speichern1Click(Sender) end; 2 : .................. |
Re: Filter im SaveDialog ansprechen
Sicher, dass du den gewählten Index auch in der Case-Abfrage drin hast?
|
Re: Filter im SaveDialog ansprechen
So funktioniert es auf jeden Fall:
Delphi-Quellcode:
Das Problem ist, dass das einfache Speichern danach nicht funzt (erstellt eine neue Datei
procedure TForm2.Speichernals1Click(Sender: TObject); // Datei|Speichern als
begin SaveDialog1.FileName := pfad; if SaveDialog1.Execute then begin Pfad := SaveDialog1.FileName; Caption := ExtractFileName(pfad); case SaveDialog1.FilterIndex of 1 : SynEdit1.Lines.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.txt')); 2 : .................. ohne Endung), oder was meinst du? |
Re: Filter im SaveDialog ansprechen
Zitat:
Delphi-Quellcode:
entfernt nur die Dateierweiterung. Der Teil '.txt' bleibt unberücksichtigt. In Deinem Beispiel musst Du
ChangeFileExt(SaveDialog1.FileName,'.txt');
Delphi-Quellcode:
nehmen. Dann wird eine vorhandene Dateierweiterung entfernt und '.txt' angehängt.
SaveDialog1.FileName := ChangeFileExt(SaveDialog1.FileName,'.txt');
PS: Habe es mit Delphi 3 Professional überprüft und es funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz