Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - (delphi) TSaveDialog hilfe (letzterbeitrag)


ppl - Fr 22.08.08 18:18
Titel: (delphi) TSaveDialog hilfe (letzterbeitrag)
Guten Abend,

ich finde einfach kein Codeschnipsel wie ich wenn ich auf dem ok button drücke,

ein zielort zum speichern der txtfile nehmen kann, momentan habe ich das so gelößt:


Delphi-Quelltext
1:
2:
3:
4:
 FileName: String;
begin

 FileName := 'C:\test.txt';


Blackheart666 - Fr 22.08.08 18:24

OpenDialog, SaveDialog


Jerk - Fr 22.08.08 18:25

Evtl kann dir ja die Komponente TsaveDialog weiterhelfen, ansonsten musste halt nen Editfeld oder ne Shellist benutzen um den Speicherort vom benutzen eingeben lassen zu können.


ppl - Fr 22.08.08 19:08

das mit dem tedit feld wüsste ich wie es geht,

aber ich raff das mit opendialog und savedialog nicht,

tsavedialog hmm weiß auch net mehr,


kann mir einer villt detailierter helfen?


Xentar - Fr 22.08.08 19:43

Hast du dir schonmal die Hilfe davon angesehen?
So umfangreich sind die nun nicht, als dass man das nicht durchlesen könnte...


ppl - So 24.08.08 15:31

Funktiniert immer noch nicht so ganz,

meine txt file wird nicht mehr abgespeichert,... woran liegt das?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 FileName: String;

 saveDialog : TSaveDialog;
begin


  saveDialog := TSaveDialog.Create(self);

  saveDialog.Title := 'Save your word file';

  saveDialog.InitialDir := GetCurrentDir;

  saveDialog.Filter := 'Text file (.txt)|*.txt';

  saveDialog.DefaultExt := 'txt';

   saveDialog.FilterIndex := 1;

  if saveDialog.Execute
  then ShowMessage('File : '+saveDialog.FileName)
  else ShowMessage('Save file was cancelled');

  saveDialog.Free;


Xentar - So 24.08.08 15:38

Es könnte daran liegen, dass du garnichts speicherst, sondern dir nur den gewählten Dateinamen anzeigen lässt (Zeile 20).


Boldar - So 24.08.08 15:38

Als erstes erzeugst du den Tsavedialog nicht dynamisch, sondern ziehst ihn einfach auch die Form (Seite Dialoge).Dann:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var f: textfile;
begin
{...}
if savedialog1.execute then 
begin
assignfile (f, savedialog1.filename);
if fileexists (savedialog1.filename) then reset(f) else rewrite(f);
write (f, 'blablabla');   //_--->Hier muss dein Text stehen!!!
closefile(f);


ppl - So 24.08.08 15:52

sorry das ich das noch nicht so auf anhiep verstehe aber ich code noch nicht lange mit delphi,

also
bloader danke das hilft mir schon einen großen schritt weiter, nur wo bei dir steht blablala wo mein text rein soll, habe ich das prob das ich eine wordlist generiere,.. und ich nicht weiß wie ich das comando dort einfüge


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
SetLength(Map, 0);

if checkbox1.checked then begin
 SetLength(Map, Length(Map)+26);
 Map[High(Map)-25] := 'A';
 Map[High(Map)-24] := 'B';
 Map[High(Map)-23] := 'C';
 Map[High(Map)-22] := 'D';
 Map[High(Map)-21] := 'E';
 // usw usw...


und das muss der doch da jetzt speichern,... aber wie, ich verstehe das nicht, mein alter code


Delphi-Quelltext
1:
2:
3:
4:
 FileName: String;
begin

 FileName := 'C:\test.txt';


hat es ja ohne prob hinbekommen, ist halt nur beschissen das der das nicht dorthinspeichert wo ich es brauche/will


elundril - So 24.08.08 16:03


Delphi-Quelltext
1:
2:
  if savedialog1.execute then
    Filename := Savedialog1.Filename;


so kannst du einen dynamischen speicherpfad machen. jedoch würd ich die von dir benutzte variable "Filename" in "Dateiname" umbenennen um nicht fehler mit savedialogs o.ä. zu provozieren.

lg elundril


ppl - So 24.08.08 16:12

hey danke so klappt das wunderbahr, habe mich jetzt damit 2 tage rumgeschlagen >.<


elundril - So 24.08.08 16:16

gerne. und da ich gelesen habe das du noch neu im geschäft bist hab ich noch einen kleinen link für dich, denn fortbildung schadet nie ;-): http://www.christian-stelzmann.de/index_tutorials_crashkurs.html

lg elundril


Blackheart666 - So 24.08.08 16:20

user profile iconelundril hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
  if savedialog1.execute then
    Filename := Savedialog1.Filename;


so kannst du einen dynamischen speicherpfad machen. jedoch würd ich die von dir benutzte variable "Filename" in "Dateiname" umbenennen um nicht fehler mit savedialogs o.ä. zu provozieren.

lg elundril


Und genau das liefert die Hilfe wenn man SaveDialog dort eintippt, das hättest du aber in zwei Tagen finden können. :wink:


ppl - So 24.08.08 16:26

meine liefert mir sowas type TSaveDialog = class (Dialogs.TOpenDialog);


das habe ich net verstanden,

nun was ich jetzt nicht schaffe ist das hier einzufügen,... der gibt mir immer nen fehler raus


Delphi-Quelltext
1:
2:
3:
  if saveDialog.Execute
  then ShowMessage('File : '+saveDialog.FileName)
  else ShowMessage('Save file was cancelled');

außerdem were ex nicht schlecht wenn es auch als txt gespeichert wird,... ich schtaffe es nicht den code so zusammen zu führen

kann mir einer tips oder hilfe hierzu geben?


elundril - So 24.08.08 16:33

du solltest dir echt den link anschauen!

wenn du nun auch eine bestätigung ausgeben willst darfst du nich 2 mal execute aufrufen. execute führt den dialog aus und zeigt ihn an. und gibt dir als boolean zurück ob er erfolgreich (mit der OK-Taste) oder nicht erfolgreich (mit der Abbrechen-Taste) ausgeführt wurde. willst du in einem if-block nun mehrere anweisungen haben musst du mit begin und end arbeiten. Aber aufpassen!!! vor einem else darf kein strichpunkt kommen. das ganze sieht dann so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var Dateiname: string;
begin
  if SaveDialog1.Execute then begin
    Dateiname := SaveDialog1.Filename;
    Showmessage('Datei (' + Dateiname + ' wurde erfolgreich gespeichert.');
    end
  else 
    Showmessage('Der speichervorgang wurde abgebrochen');


lg elundril

//edit: hochkomma vergessen!


ppl - So 24.08.08 16:55

hey vielen dank du bist echt der beste, den link habe ich mir schon gespeichert, werde gleich mal reingucken wenn ich hier paar sachen erledigt habe vielen dank

werde dein codevorschlag gleich mal reinsetzen , hoffentlich funzt es

mfg


ppl - So 24.08.08 17:28

so elluigi,

irgendwas war da nicht gans richtig, beim compilieren kommen diese fehler die ich mir nicht alle erklären kann.


Delphi-Quelltext
1:
2:
75:    Showmessage(Datei (' + Dateiname + 'wurde erfolgreich gespeichert.');
76:    end



Quelltext
1:
2:
3:
4:
5:
6:
[Pascal Fehler] Unit1.pas(75): E2003 Undefinierter Bezeichner: 'Datei'
[Pascal Fehler] Unit1.pas(75): E2029 ')' erwartet, aber Bezeichner 'wurde' gefunden
[Pascal Fehler] Unit1.pas(75): E2066 Operator oder Semikolon fehlt
[Pascal Fehler] Unit1.pas(75): E2052 Nicht abgeschlossener String
[Pascal Fehler] Unit1.pas(76): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'string' gefunden
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


Blackheart666 - So 24.08.08 17:36

Steht doch alles in der Fehlerbeschreibung geh die doch mal einzeln durch angefangen mit was ist Datei ?


ppl - So 24.08.08 17:43

also ich dachte das man datei bei var definiren muss aber keine ahnung wie genau :(


Xentar - So 24.08.08 17:46

Da fehlt einfach nur ein '


Blackheart666 - So 24.08.08 17:53

Xentar hatt es ja nun schon verraten Datei ist ein String gehöhrt allso in 'Datei'

Delphi-Quelltext
1:
Showmessage('Datei (' + Dateiname + ') wurde erfolgreich gespeichert.');                    

Schau dir nur langsam den Crashkurs an. :wink:


ppl - So 24.08.08 17:53

danke das ' kommt vor Datei also : 'Datei


wäre da nicht alleine drauf gekommen,..

na ja hoffentlich lerne ich es bald ^^

danke nochmal an alle die mir geholfen haben!

mfg