![]() |
SaveDialog auswerten?
Wenn man mit
Delphi-Quellcode:
2 Filter gesetzt hat, wie kann man nun auswerten welches Filter der Anwender geklickt hat?
SaveDialog.Filter := 'Text- Dateien (*.txt)|*.txt|CSV- Dateien (*.csv)|*.csv';
|
Re: SaveDialog auswerten?
Moin Smart,
schau Dir mal TSaveDialog.FilterIndex an. |
Re: SaveDialog auswerten?
Zitat:
Delphi-Quellcode:
Bzw:
If SaveDialog.FilterIndex = 2 Then SaveDialog.Filename := 'Namenlos.csv';
If SaveDialog.FilterIndex = 1 Then SaveDialog.Filename := 'Namenlos.txt';
Delphi-Quellcode:
versucht, klappt aber nicht. Was mache ich da falsch?.
If SaveDialog.FilterIndex = 1 Then SaveDialog.Filename := 'Namenlos.csv';
If SaveDialog.FilterIndex = 0 Then SaveDialog.Filename := 'Namenlos.txt' |
Re: SaveDialog auswerten?
Moin Smart,
die Indizes beginnen bei 1. An welcher Stelle fragst Du dass denn ab? Ggf. könnte auch das Ereignis OnTypeChange für Dich von Interesse sein. |
Re: SaveDialog auswerten?
Zitat:
Delphi-Quellcode:
Du meinst in der OnTypeChange die Abfrage setzen, oder?
SaveDialog1.Title := 'Exportieren';
SaveDialog1.Filter := 'Text- Dateien (*.txt)|*.txt|CSV- Dateien (*.csv)|*.csv'; // Abfrage If SaveDialog1.FilterIndex = 2 Then SaveDialog1.Filename := 'Namenlos.csv'; If SaveDialog1.FilterIndex = 1 Then SaveDialog1.Filename := 'Namenlos.txt'; if SaveDialog1.Execute then Memo1.Lines.SaveToFile(Form1.SaveDialog1.Filename); |
Re: SaveDialog auswerten?
Hi smart,
normalerweise interessiert dich der Index gar nicht, da er vom common dialog berücksichtigt wird - die Endung wird korrekt beigesteuert, falls du sie bei der Eingabe des Dateinamens vergessen hast:
Delphi-Quellcode:
In deinem Beispiel ist die FilterIndex-Abfrage eigentlich überflüssig...
procedure TDemoForm.SaveButtonClick(Sender: TObject);
begin with SaveDialog do begin FilterIndex := 1; if Execute then ShowMessage(Format('(%d) %s', [FilterIndex, FileName])); end; end; Grüße vom marabu |
Re: SaveDialog auswerten?
wenn du wissen willst welchen Filter der nutzer gewählt hat solltest du die Abfrage dementsprechend auch nach dem SaveDialog1.Execute machen.
|
Re: SaveDialog auswerten?
Moin Marabu,
Zitat:
(ich habe das eben noch einmal ausprobiert) Ggf. wird in dem Falle nur die DefaultExt angehängt. |
Re: SaveDialog auswerten?
Hi Chris,
wir machen da gänzlich verschiedene Erfahrungen. Mein Beispiel-Code, ergänzt um die Initialisierung, tut genau das, was ich beschrieben habe.
Delphi-Quellcode:
Ratlose Grüße vom marabu
procedure TDemoForm.FormCreate(Sender: TObject);
begin SaveDialog.Filter := 'Alle Dateien (*.*)|*.*' + '|Text-Dateien (*.txt)|*.txt' + '|CSV-Dateien (*.csv)|*.csv'; end; |
Re: SaveDialog auswerten?
Zitat:
Wenn das so ist, dann würde ich das so machen:
Delphi-Quellcode:
Alles andere macht ja der common dialog. Wenn man die Erweiterung vorgibt, dann schaltet man den internen Mechanismus aus. Bei vorhandenem .txt wird diese Erweiterung verwendet, auch wenn der User per FilterIndex .csv ausgewählt hat.
SaveDialog.FileName := 'Namenlos';
marabu |
Re: SaveDialog auswerten?
Moin Marabu,
:gruebel: also ich habe jetzt einmal ganz von Vorne begonnen. Ein TSaveDialog, ein Button und Deine beiden Routinen (Copy&Paste) Als "Kirsche auf der Sahne" habe ich dann auch noch Deine Benennungen übernommen. ;-) Programmstart (F9) Als erstes bin ich dann in C:\temp gegangen, und habe als Dateinamen test3 eingegeben, sowie den Filter für Text-Dateien ausgewählt. ShowMessage liefert mir: --------------------------- Project2 --------------------------- (2) C:\temp\test3 --------------------------- OK --------------------------- bei dem anderen Filter sieht es dann, abgesehen von der (3) dann genauso aus. Und das, wo wir auch noch beide mit D7 arbeiten :? [EDIT] Zitat:
[/EDIT] |
Re: SaveDialog auswerten?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Chris,
habe mir eben meine letzten Haare ausgerissen und ein wenig auf den Nägeln gekaut, aber die Ausgabe meines Programmes bestätigt mir meine Erfahrungen. Hier mein Code. Die Auflösung des Rätsels würde mich interessieren. Freundliche Grüße vom marabu Sorry Heike, aber das fällt doch noch nicht unter thread hijacking - oder? |
Re: SaveDialog auswerten?
Moin Marabu,
Du hast geschummelt ;-) Ursprünglich fehlte die Zuweisung an TSaveDialog.Filename (siehe oben). Ist beim Aufruf von SaveDialog Filename nicht leer, funktioniert es mit der Endung. Sobald man aber "vergisst" einen Wert vorzugeben, oder das eventuell auch nicht will klappt es nicht mehr. Wenn kein Filter ausgewählt wird (Alle Dateien bleibt stehen) erhält man sogar einen ungültigen Dateinamen (Endung: .*.txt) |
Re: SaveDialog auswerten?
Hi Chris,
ich habe nicht bewusst geschummelt, sondern nur versucht die Intention von smart umzusetzen. Letzten Endes wollte ich nur auf die internen Funktionen hinweisen. Mit allem, was dieser thread jetzt an Informationen enthält, sollte smart in der Lage sein ein bombensicheres und benutzerfreundliches Save-Command für ihr Projekt zu basteln. Zufriedene Grüße vom marabu |
Re: SaveDialog auswerten?
Vielen Dank für Eure umfangreiche Hilfe. Ich hatte gedacht, dass man den Dateiname mit Endung in der Dialogbox sehen könnte. Das scheint wohl nicht zu gehen.:-(
Vielen Dank nochmal. |
Re: SaveDialog auswerten?
Also, irgendwie bin ich zu dumm dafür. Habe jetzt den Code auf meine Verhältnisse angepasst. Klapp aber nicht. Die Endungen werden nicht hinzugefügt.
Delphi-Quellcode:
Es wird immer nur NamenLos gespeichert. Was mache ich da falsch? Hat Einer von Euch einen Tipp?
SaveDialog1.Title := 'Exportieren';
SaveDialog1.Filter := 'Alle Dateien (*.*)|*.*' + '|Text-Dateien (*.txt)|*.txt' + '|CSV-Dateien (*.csv)|*.csv'; with SaveDialog1 do begin FilterIndex := 1; FileName := 'NamenLos'; if Execute then Memo1.Lines.SaveToFile(FileName); end; |
Re: SaveDialog auswerten?
Hast du denn den FilterIndex interaktiv verändert? Bleibt er auf 1 stehen, dann wird natürlich keine Endung beigesteuert.
Grüße vom marabu |
Re: SaveDialog auswerten?
Zitat:
|
Re: SaveDialog auswerten?
Delphi-Quellcode:
Nu geht das...
begin
SaveDialog1.Title := 'Exportieren'; SaveDialog1.Filter := 'Alle Dateien (*.*)|*.*' + '|Text-Dateien (*.txt)|*.txt' + '|CSV-Dateien (*.csv)|*.csv'; with SaveDialog1 do begin FilterIndex := 1; FileName := 'NamenLos'; DefaultExt := 'txt'; // schau mal hier if Execute then Memo1.Lines.SaveToFile(FileName); end; end; marabu |
Re: SaveDialog auswerten?
Das hätte ich mir auch nie träumen lassen, dass man an so ein dummen SaveDialog Stunden verbringen kann. Hab vielen Dank @marabu, für die Hilfe.
|
AW: SaveDialog auswerten?
Also das ist ein Bug in der Implementierung.
Ich hab mir mit einem WorkAround geholfen. Ich Hänge eine Prozedur in dass OnTypeChange Event des Dialogs ein. Zu diesem Zeitpunkt stimmt der Index nämlich noch. Dann merke ich mir den Index indem ich ihn in "den" Tag befördere. siehe Quellcode
Delphi-Quellcode:
Hack the planet// zunächst der Handler er speichert den echten Index einfach in der Tag Variablen zwischen procedure TMainGUI.ReactOnTypeChange(Sender: TObject); begin if Sender is TFileSaveDialog then begin TFileSaveDialog(Sender).Tag := TFileSaveDialog(Sender).FileTypeIndex; end; end; procedure TMainGUI.Messdatenspeichern1Click(Sender: TObject); var LocSaveDialog : TFileSaveDialog; AFileTypeItem : TFileTypeItem; begin LocSaveDialog := TFileSaveDialog.Create(Self); with LocSaveDialog do begin OnTypeChange := ReactOnTypeChange; AFileTypeItem := FileTypes.Add; with AFileTypeItem do begin DisplayName := 'OpenDocumentSpreadSheet'; FileMask := '*.ods'; end; AFileTypeItem := FileTypes.Add; with AFileTypeItem do begin DisplayName := 'CommaSeparatedValue'; FileMask := '*.csv'; end; if Execute then begin // Old Code // case FileTypeIndex of // New Code case LocSaveDialog.Tag of 1 : begin ... end; 2 : begin ... end; end; end; end; end; Neppi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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