![]() |
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. |
Re: Filter im SaveDialog ansprechen
Hier jetzt eine immer noch nicht :( funktionierende Lösung:
Speichern unter:
Delphi-Quellcode:
Speichern:
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 : SynEdit1.Lines.SaveToFile(ChangeFileExt(SaveDialog1.FileName, '.htm')); 3 : SynEdit1.Lines.SaveToFile(ChangeFileExt(SaveDialog1.FileName, '.php'));
Delphi-Quellcode:
Also speichern unter klappt einwandfrei. Wenn ich allerdings danach auf speichern
begin
if pfad = StandardFileName then Speichernals1Click(Sender) else begin SynEdit1.Lines.SaveToFile(pfad); SynEdit1.Modified := False end; klicke wird einfach eine neue Datei ohne Endung erstellt. Ich find den Fehler nicht. Hilfeeeeeeeeeeeeee :wall: |
Re: Filter im SaveDialog ansprechen
Moin Grolle,
Du müsstest an die Variable pfad auch den mit ChangeFileExt geänderten Dateinamen übergeben, sonst hat er keine (oder die im SaveDialog eingegebene) |
Re: Filter im SaveDialog ansprechen
Aber warum klappt das nicht so?:
Delphi-Quellcode:
case SaveDialog1.FilterIndex of
1 : begin SynEdit1.Lines.SaveToFile(ChangeFileExt(SaveDialog1.FileName, '.txt')); Pfad := SaveDialog1.FileName; end; |
Re: Filter im SaveDialog ansprechen
Moin Grolle,
weil SaveDialog1.Filename nun einmal keine Endung enthält. Wenn, dann so:
Delphi-Quellcode:
case SaveDialog1.FilterIndex of
1 : begin Pfad := ChangeFileExt(SaveDialog1.FileName, '.txt'); SynEdit1.Lines.SaveToFile(Pfad); end; |
Re: Filter im SaveDialog ansprechen
:oops: Besten Dank!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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