Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Filter im SaveDialog ansprechen (https://www.delphipraxis.net/43016-filter-im-savedialog-ansprechen.html)

Grolle 27. Mär 2005 17:09


Filter im SaveDialog ansprechen
 
Hallo!
Im OnCreate Ereignis einer Form definiere ich die Filter für den SaveDialog:
Delphi-Quellcode:
  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.....................
anschließend rufe ich Datei speichern unter so auf:
Delphi-Quellcode:
procedure TForm2.Speichernals1Click(Sender: TObject);
begin
  SaveDialog1.FileName := pfad;
  if SaveDialog1.Execute then
  begin
    Pfad := SaveDialog1.FileName;
    Caption := ExtractFileName(pfad);
    Speichern1Click(Sender)
  end;
end;
Wie kann ich nun, wenn der User den Filter im SaveDialog auswählt die Datei mit der entsprechenden
Endung speichern?
:gruebel:

SirThornberry 27. Mär 2005 17:27

Re: Filter im SaveDialog ansprechen
 
über Savedialog.FilterIndex kannst du herausfinden welches gewählt wurde (ist nicht 0-basierend sondern 1-basierend)

Christian Seehase 27. Mär 2005 18:24

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.

Grolle 27. Mär 2005 18:26

Re: Filter im SaveDialog ansprechen
 
Aber wie kann ich dann anhand des FilterIndex eine
entsprechende Endung zuweisen?

PierreB 27. Mär 2005 18:29

Re: Filter im SaveDialog ansprechen
 
So in etwa:
Delphi-Quellcode:
if FilterIndex = 1 then SaveToFile(pfad + '.html')

Garfield 27. Mär 2005 19:11

Re: Filter im SaveDialog ansprechen
 
Eine Case-Anweisung
Delphi-Quellcode:
Case SaveDialog.FilterIndex of
  1 : Document.SaveToFile(ChangeFileExt(SaveDialog.FileName, '.html'));
  {...}
End;
wäre vermutlich besser. Das ChangeFileExt vermeidet fehlende, falsche oder doppelte Endungen.

Anstelle
Delphi-Quellcode:
SaveDialog.FileName := Pfad;
würde ich
Delphi-Quellcode:
SaveDialog.InitialDir := Pfad;
nehmen.

Grolle 27. Mär 2005 23:48

Re: Filter im SaveDialog ansprechen
 
Hi!
Habe es jetzt so gemacht. Allerdings speichert das Prog die Datei jetzt ganz ohne Endung?
Delphi-Quellcode:
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 : ..................
Hilfeeeeeeeeeeee

malo 27. Mär 2005 23:51

Re: Filter im SaveDialog ansprechen
 
Sicher, dass du den gewählten Index auch in der Case-Abfrage drin hast?

Grolle 27. Mär 2005 23:57

Re: Filter im SaveDialog ansprechen
 
So funktioniert es auf jeden Fall:
Delphi-Quellcode:
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 : ..................
Das Problem ist, dass das einfache Speichern danach nicht funzt (erstellt eine neue Datei
ohne Endung), oder was meinst du?

Garfield 28. Mär 2005 12:22

Re: Filter im SaveDialog ansprechen
 
Zitat:

Zitat von Grolle
Allerdings speichert das Prog die Datei jetzt ganz ohne Endung?

Das ist bei Deinem Beispiel korrekt. Denn der Befehl
Delphi-Quellcode:
ChangeFileExt(SaveDialog1.FileName,'.txt');
entfernt nur die Dateierweiterung. Der Teil '.txt' bleibt unberücksichtigt. In Deinem Beispiel musst Du
Delphi-Quellcode:
SaveDialog1.FileName := ChangeFileExt(SaveDialog1.FileName,'.txt');
nehmen. Dann wird eine vorhandene Dateierweiterung entfernt und '.txt' angehängt.

PS: Habe es mit Delphi 3 Professional überprüft und es funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.
Seite 1 von 2  1 2      

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