Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TSaveDialog, Dateiname mit gewählter Extension


Thomas78 - Do 04.11.04 08:48
Titel: TSaveDialog, Dateiname mit gewählter Extension
Hallo Leute,

habe ein Problem mit SaveDialog. Ich möchte die ausgewählte Extension an den Dateinamen anhängen, wenn der eingegebene Dateiname keine Erweiterung hat.

z.B.: *.csv *.txt *.xlc als Auswahl
wurde jetzt der Dateiname 'test' eingegeben und in der Combobox *.txt gewählt, so soll die Datei auch als test.txt gespeichert werden. Ich bekomme aber nicht raus, was für ne Extension gewählt wurde. FilterIndex wird ja nur beim Öffnen des Dialogs ausgelesen.
Hat jemand nen Ansatz :?:

MfG

Thomas


Stübi - Do 04.11.04 08:55

Probiers mal mit dem Filterindex. (nicht getestet)
Wenn du weist welcher Filterindex gewählt wurde musst du nur wissen was für eine Extension der gewisse Filterindex hat.

Gruss Stübi


sourcehunter - Do 04.11.04 12:27

Eigentlich hat doch jeder Dateiname aus einem SaveDialog immer eine Endung, oder liege ich da falsch?


StefanH - Do 04.11.04 12:59

wenn du "DefaultExt" ausfüllst, macht er das automatisch :roll:


Thomas78 - Fr 05.11.04 10:31

Ich glaube ihr habt mich falsch verstanden :(

1. Ich habe doch mehrere auswählbare Extensionen zur Verfügung. Da hilft mir ein Eintrag der DefaultExt wenig, denn dann wird ja in jedem Fall (wenn der eingegebende Dateiname keine Endung hat) die DefaultExt angehangen.

2. Die Eigenschaft FilterIndex ist nicht verwertbar, denn sie wird bei der Auswahl einer Extension nicht gesetzt. Sie wird lediglich beim Öffnen des Dialoges ausgelesen. Damit wird die Extension festgelegt, die beim Öffnen des Dialoges zuerst aktiv ist.

Hinweis: Ich nutze Delphi 5Prof.. Es kann natürlich sein, dass die Dialoge bei höheren Versionen anders reagieren. Bitte mal überprüfen und mit meinen Aussagen vergleichen.

Hat sonst noch jemand nen Lösungsvorschlag für mein Problem?

Danke für eure Mühen

Thomas


Gausi - Fr 05.11.04 11:21

Also. Wenn ich

Delphi-Quelltext
1:
2:
opendialog1.Execute;
showmessage(inttostr(opendialog1.FilterIndex));
mache, dann wird nach schließen des opendialogs immer der korrekte Filterindex angezeigt. Ich habe allerdings D6 Pers, aber ich denke mal, dass auch bei D5 das so funktioniert. Alles andere wäre irgendwie sinnfrei...

zu deinem Problem: Überprüfe, ob der Filename eine Endung enthält. Da gibts ne Routine zu. Wenn ja -> alles in Ordnung.
Wenn nein ->

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// muss du noch syntaktisch korrigieren ;)
Case filterindex of
     1: filename:=filename+'.txt';
     2: filename:=filename+'.tmp';
     3: filename:=filename+'.dat'
end;


Thomas78 - Fr 05.11.04 15:57

Hat sich alles geklärt.

Es lag am AgSaveDialog, den ich gewähnlich benutze. Den hatte ich mal runtergeladen (Delphi-Forum oder Delphi-Praxis). Er sollte wie ein normaler SaveDialog arbeiten. Zusätzlich stellt er sich aber auf das vorhandene Betriebsystem ein und zeigt sich beispielsweise unter WinXP nicht mehr in dem Win98 Design sondern mit dem "schönen" XP-Aussehen.

Aber naja, die Schönheit muss natürlich der Funktionalität weichen. Also raus damit.

Danke nochmal für eure Hinweise.