Autor |
Beitrag |
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 02:10
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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Sa 13.03.10 03: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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 04: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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 13.03.10 05: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...
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 05: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
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Sa 13.03.10 09: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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 13.03.10 10: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
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 13.03.10 12: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.
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 13: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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Sa 13.03.10 13:42
Das geht mit SaveDialog1.execute ...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 13.03.10 13: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
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 14: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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 13.03.10 14:12
Das kommt von c+p
ohne zu lesen und zu verstehen
schau dir den Dialog an!!
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 13.03.10 14: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.
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 17:23
Anders Hobby suchen hmm Nö
Grundlagen Lernen no time leider
aber ich habs geschafft geht alles
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: Sa 13.03.10 17: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!
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
maier1990
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 13.03.10 17: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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 13.03.10 17:43
Antort:
Keine Zeit um Grundlagen zu lernen, lesen und verstehen
würde ja sonst gern helfen
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mi 24.03.10 22: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...
|
|