Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Speichern wen Text verändert wurde
Delete - Sa 13.03.10 01:10
Titel: Speichern wen Text verändert wurde
Hallo
Ich hab es jetzt hinbekommen das beim Schließen abgefragt wird ob man Speichern will oder nicht, allerdings kommt das immer. Ich will wen beim Synedit Text was geändert wurde das es dann kommt. Ist das möglich?
lg
elundril - Sa 13.03.10 02:07
Hallo,
jede dieser großen Textkomponenten (RichEdit, Memo, SynEdit usw) haben die Eigenschaft Modified. Also mit
Delphi-Quelltext
1: 2:
| if SynEdit.Modified then |
kannst du abfragen ob der Text verändert wurde (Beim speichern natürlich immer Modified auf false setzen, sonst bringts ja nix. ;))
lg elundril
Delete - Sa 13.03.10 03:43
Ich Benutze jezt diesen Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if SynEdit1.Modified then
if saveDialog1.Execute
then ShowMessage('Datei gespeichert unter : '+saveDialog1.FileName) else ShowMessage('Speichern nicht erfolgreich'); |
Sobald in Synedit was geändert wurde, und ich Beenden will kommt zwar der Speicher Dialog und die Message das Erfolgreich gespeichert wurde, aber es Speichert nichts ab.
Lg
Xentar - Sa 13.03.10 04:14
Du solltst vielleicht auch was speichern, statt einfach nur die Meldung anzuzeigen..
Edit:
Ich kenn die Komponente nicht, aber sowas wie SynEdit.SaveToFile oder SynEdit.Lines.SaveToFile oder so gibt es bestimmt...
Delete - Sa 13.03.10 04:39
Könnt ihr mir pls diesen Code verbessern?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Dateiname : string; begin if SynEdit1.Modified then Dateiname := SaveDialog1.FileName; SynEdit1.Lines.SaveToFile(Dateiname); if saveDialog1.Execute
then ShowMessage('Datei gespeichert unter : '+saveDialog1.FileName) else ShowMessage('Speichern nicht erfolgreich'); |
Ich check es nimmer :(
Da kommt immer eine Fehler meldung das der angegebene Pfad nicht gefunden werden kann
jfheins - Sa 13.03.10 08:24
Es ist eben nur fast sinnvoll erst zu speichern (.SaveToFile) und dann erst abzufragen, wohin gespeichert werden soll (.execute)
Btw.: Wenn du mal suchst, findest du ganz bestimmt Beispiele für den korrekten Gebrauch von dem Savedialog.
ALF - Sa 13.03.10 09:48
hi, versuchs mal so!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if SynEdit1.Modified then begin if MessageDlg('Daten wurden geändert...! Speichern ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then SynEdit1.SaveToFile(Dateiname); SynEdit1.Modified := false;
end; |
Wobei man dies auch zum zwischenspeichern nehmen kann! (eigene Procedure)
Gruss ALf
ffgorcky - Sa 13.03.10 11:01
Also ich denke mal, dass es so in etwa gehen müsste:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Dateiname : string; begin if SynEdit1.Modified then begin if MessageDlg('Sie haben etwas geändert'+#13#10+' - also dies Datei neu abspeichern ?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then if SaveDialog1.execute then begin Dateiname := SaveDialog1.FileName; SynEdit1.Lines.SaveToFile(Dateiname); ShowMessage('Datei gespeichert unter : '+saveDialog1.FileName); end else ShowMessage('Speichern wegen Abbruch nicht erfolgreich'); end; end; |
Edit:
Du könntest dann auch in Deinen
else-Zweig noch ein
Action:=caNone; mit einfügen, wenn Du nicht möchtest, dass sich das Programm dann so einfach schließt, wenn man den Speichern-Dialog einfach so abgebrochen hat. Dann müsstest Du die beiden Befehle aber natürlich in
begin und
end; einrahmen.
Delete - Sa 13.03.10 12:40
Oke das hier ist jetzt mein Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Dateiname: string; begin if SynEdit1.Modified then if MessageDlg('Daten wurden geändert...! Speichern ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then else SynEdit1.Lines.SaveToFile(Dateiname);
SynEdit1.Modified := false;
end; |
Wenn ich auf Beenden geh kommt nichts nur wen was verändert ist.
Aber wen ich dan auf ja klicken will kommt immer:
Das System kann den angegebenen Dateipfad nicht finden.
Wie mach ich es das dan das Speichern unter Feld kommt?
lg
platzwart - Sa 13.03.10 12:42
Das geht mit SaveDialog1.execute ...
ALF - Sa 13.03.10 12:47
schau mal was ich geschrieben habe!!!!
| Zitat: |
//wobei der Dateiname und Ort vom laden in synedit bekannt sein sollte!
|
und Du löschtst den Dateiename in
Delphi-Quelltext
1: 2: 3:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Dateiname: string; begin |
was soll man dazu sagen!
oder schau dir das von
ffgorcky an!
Gruss Alf
Delete - Sa 13.03.10 13:03
Wen ich das von
ffgorcky nimm kommt beim Compilieren immer
[Error] es.pas(8522): Too many actual parameters
[Error] es.pas(8533): Statement expected but 'PROCEDURE' found
[Fatal Error] helper.dpr(272): Could not compile used unit 'es.pas'
ALF - Sa 13.03.10 13:12
Das kommt von c+p :evil:
ohne zu lesen und zu verstehen
schau dir den Dialog an!!
Blackheart666 - Sa 13.03.10 13:23
Wie man an diesem und den anderen Threads von Meier1990 sieht fehlem ihm sämtliche Grundlagen.
Meist haben sich aber Mitglieder gefunden die ihm Copy & Paste Code zur Verfügung stellen.
Am besten würde helfen nur Stichworte in den Raum zu stellen, das würde dafür sorgen mal die Delphi Hilfe zu benutzen und Eigeninitiative zu zeigen.
Mein Rat an Meier1990, entweder Grundlagen lernen oder ein anderes Hobby zulegen.
Delete - Sa 13.03.10 16:23
Anders Hobby suchen hmm Nö
Grundlagen Lernen no time leider
aber ich habs geschafft geht alles
bole - Sa 13.03.10 16:35
ich denke Du würdest sogar Zeit sparen wenn Du erst die Grundlagen lernst. Deine Programme wären in einem Bruchteil der Zeit fertig!
Delete - Sa 13.03.10 16:40
Ja vllt stimmts auch.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Dateiname : string; ClickedBtn: Word; begin if SynEdit1.Modified then begin ClickedBtn := MessageDlg('Wollen sie ihr Script Speichern?', mtConfirmation, [mbAbort, mbYes, mbNo], 0); if ClickedBtn = id_yes then if SaveDialog1.execute then begin Dateiname := SaveDialog1.FileName; SynEdit1.Lines.SaveToFile(Dateiname); ShowMessage('Datei gespeichert unter : '+saveDialog1.FileName); end else ShowMessage('Speichern wegen Abbruch nicht erfolgreich'); end if ClickedBtn := id_abort then begin Form11.ShowModal; end; |
Wieso geht der Abort Button nicht?
Lg
ALF - Sa 13.03.10 16:43
Antort:
Keine Zeit um Grundlagen zu lernen, lesen und verstehen
würde ja sonst gern helfen :rofl:
Gruss Alf
ffgorcky - Mi 24.03.10 21:37
Wenn Du Dein Programm weiter laufen lassen möchtest, wenn Du den Abort-Button gedrückt hast, dann müsstest Du das doch nur entsprechend abfragen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| if SaveDialog1.execute then if ClickedBtn = id_yes then begin Dateiname := SaveDialog1.FileName; SynEdit1.Lines.SaveToFile(Dateiname); ShowMessage('Datei gespeichert unter : '+saveDialog1.FileName); end else if ClickedBtn = id_no then begin ShowMessage('Sie wollten wohl doch nicht speichern...'); end else if ClickedBtn := id_abort then begin Form11.ShowModal; end; |
denke mal, dass [us]ALF[/us] dass so gesagt hat, weil Du in Deiner
IF-Abfrage Deine
begin und
end nicht richtig gesetzt hast.
Vor dem
ShowMessage('Speichern wegen Abbruch nicht erfolgreich');
fehlt meiner Ansicht nach bei Deinem Quelltext noch ein
begin.
---------------------------------------------------------------------------------------------------------------------------------------------
Wobei ich jetzt so gerade überlege, dass bei einem abort doch Der SaveDialog nicht als executed gilt - oder irre ich da jetzt?
PS:
ALF, ich hoffe mal, dass er diese Frage jetzt durchs selbst in Bücher einlesen sowieso schon beantworten konnte, weil wir ihn so eine Zeit da jetzt "im Stich gelassen" haben - aber das Thema ist ja immer noch offen...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!