Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - [VisualCLX] TSaveDialog aufrufen


ConditionZero - Di 03.04.07 19:05
Titel: TSaveDialog aufrufen
tach,
möcht in meine form ein SaveDialog aufrufen der auf Button1.Click aufgehen soll.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.SaveAsClick(Sender: TObject);
begin

Create(self:TSaveDialog);
TSaveDialog.Execute;

end;


aber das klappt irgendwie nicht wie ich will, was ist da falsch?

LG


Fighter#1 - Di 03.04.07 19:30

Probiers so :

Delphi-Quelltext
1:
2:
3:
4:
5:
  With TSaveDialog.Create(self) do begin
     If Execute Then begin
       ShowMessage(Filename);
     end;
  end;


Dein Fehler : du hast einen TSaveDIalog einfach so erstellt ohne ihn zu benutzen, TSaveDialog ist nach Create auch noch keine Variable!
Du musst das "kombineren"


ConditionZero - Di 03.04.07 19:39

ah ok danke hat geklappt,
öhm mal noch so ne frage: kann man die liste im SaveDlg wo de dateityp steht noch benutzen also was reinschreiben?


JayEff - Di 03.04.07 19:43

Ich empfehl dir, mal die Komponente TSaveDialog auf die Form zu ziehen, da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.


Fighter#1 - Mi 04.04.07 11:58

Warum denn das JayEff???
Man muss nich aufs Formular ziehen, das geht mit Filter so:
Also so "dynamisch" ist das doch viel geschickter!
Filter funktioniert so:
Filter:='Bitmap|*.bmp';
Der User wählt Dateityp Bitmap und sieht alle Dateien mit *.bmp.

Um mehr als einen Dateityp einzutragen einfach mehrere solcher Trennzeichen nutzen:
Filter:='Bitmap|*.bmp|Jpegs|*.jpg';

Und wenn man jetzt noch mehrere Dateiendungen pro Dateityp nutzen woll sieht das so
aus:
Trennzeichen für Endungen ist ein Semikolon
Filter:='Bilder|*.jpg;*.bmp|Lieder|*.mp3;*.wav';


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  With TSaveDialog.Create(self) do begin
    Filter:='Bilder|*.bmp;*.jpg;*.gif|Lieder|*.mp3;*.wav';  
     If Execute Then begin
       ShowMessage(Filename);
     end;
  end;


noidic - Mi 04.04.07 12:12

Ich hab heut irgendwie meinen Klugscheißertag...

auf Konstrukte wie 'with TSomeClass.create do' sollte man möglichst verzichten, stattdessen das erzeugte Objekt in eine Variable schreiben und damit arbeiten.

Grund:

Bei einer Erweiterung des Code kann man auch außerhalb des with-Blocks auf das Objekt zugreifen. Ausserdem werden diese with-Geschichten bei längerem Code schnell unübersichtlich.

In unseren Programmierrichtlinien ist das Konstrukt deshalb auch verboten, hat zu oft zu Fehlern geführt wie auch hier, der Dialog wird hier niemals freigegeben und schimmelt im Speicher rum.

Bitte das nicht als Angriff verstehen, nur als Anregung :)


Chatfix - Mi 04.04.07 12:16

Nur der Form halber, es ist üblich die Benutzen Filter nochmal in Klammern beim Name aufzuführen.
Ebenfalls wäre eventuell ein "Alle Dateien" sinnvoll.

Es würde dann so aussehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  With TSaveDialog.Create(self) do begin 
    Filter:='Bilder (*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif|Lieder (*.mp3;*.wav)|*.mp3;*.wav|Alle Dateien (*.*)|*.*';   
     If Execute Then begin 
       ShowMessage(Filename); 
     end
  end;


Mindforce - Mi 04.04.07 12:35

HI,

erstell doch einfach erstmal ein SaveDialog in der Liste "Dialoge".

Dann einfach den Filter im OM ändern und dann


Delphi-Quelltext
1:
SaveDialog1.Execute;                    


Mindforce


JayEff - Mi 04.04.07 21:31

user profile iconFighter#1 hat folgendes geschrieben:
Warum denn das JayEff???
Man muss nich aufs Formular ziehen, das geht mit Filter so:
Also so "dynamisch" ist das doch viel geschickter!

Mag ja sein, aber ... :
user profile iconJayEff hat folgendes geschrieben:
[...], da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.

Übersichtlicher als im Objektinspektor bekommst du selbige nicht aufgelistet, ausserdem sieht man dort, nach welchem Schema man Filter einen String zuweisen muss... :roll:


HelgeLange - Mi 04.04.07 22:08

und der dialog wird immer noch nicht freigegeben!


Blackheart666 - Mi 04.04.07 22:19

Muss Er denn überhaupt selbst erzeugt werden, oder kann man Ihn nicht einfach aufs Formular ziehen !?.


JayEff - Mi 04.04.07 23:02

user profile iconJayEff hat folgendes geschrieben:
Ich empfehl dir, mal die Komponente TSaveDialog auf die Form zu ziehen, da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.


user profile iconFighter#1 hat folgendes geschrieben:
Warum denn das JayEff???
Man muss nich aufs Formular ziehen, das geht mit Filter so:
Also so "dynamisch" ist das doch viel geschickter!


user profile iconJayEff hat folgendes geschrieben:
Mag ja sein, aber ... :
user profile iconJayEff hat folgendes geschrieben:
[...], da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.

Übersichtlicher als im Objektinspektor bekommst du selbige nicht aufgelistet, ausserdem sieht man dort, nach welchem Schema man Filter einen String zuweisen muss... :roll:


Beantwortet das deine Frage, Blackheart? ;)


Blackheart666 - Do 05.04.07 08:48

user profile iconJayEff hat folgendes geschrieben:
user profile iconJayEff hat folgendes geschrieben:
Ich empfehl dir, mal die Komponente TSaveDialog auf die Form zu ziehen, da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.


user profile iconFighter#1 hat folgendes geschrieben:
Warum denn das JayEff???
Man muss nich aufs Formular ziehen, das geht mit Filter so:
Also so "dynamisch" ist das doch viel geschickter!


user profile iconJayEff hat folgendes geschrieben:
Mag ja sein, aber ... :
user profile iconJayEff hat folgendes geschrieben:
[...], da siehst du ihre Eigenschaften. Was du suchst, müsste 'Filter' sein.

Übersichtlicher als im Objektinspektor bekommst du selbige nicht aufgelistet, ausserdem sieht man dort, nach welchem Schema man Filter einen String zuweisen muss... :roll:


Beantwortet das deine Frage, Blackheart? ;)


Nein - Ich meinte ConditionZero muss es denn unbedingt ein dynamisch erstellter SaveDialog sein ? (Wenn Ja dann ist meine Frage beantwortet) :wink: