Hallo,
ich habe eine Art Texteditor geschrieben, und will nun eine Funktion Rückgängig machen. Als Grundidee hatte ich gedacht, mache ich eineArray of TStrings und speichere im OnChange-Ereignis des RichEdits jede Änderung in einer neuen Variable von TStrings.
Dann beim Klick auf den Button 'Rückgängig' soll die Letzte Version wiederhergestellt werden. Das Problem ist nur (zumindest denke ich das es das Problem ist), das beim wiederherstellen des alten Textes wieder das OnChange Ereignis wieder aufgerufen wird.
Dann kommt Folgende Fehlermeldung:
"nil kann nicht zu TRichEditStrings zugewiesen werden."
Hat vielleicht jemand von euch eine Idee wie ich das umgehen kann?
Ich poste mal den Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var Änderungen: Array of TStrings; Anzahl_Änderungen: Integer;
procedure TEingabetext_Formular.EingabetextChange(Sender: TObject); begin Anzahl_Änderungen := Anzahl_Änderungen + 1; SetLength(Änderungen, Anzahl_Änderungen); Änderungen[Anzahl_Änderungen] := Eingabetext.Lines; end; procedure TEingabetext_Formular.RückgängigClick(Sender: TObject); begin Eingabetext.Lines.Clear; Anzahl_Änderungen := Anzahl_Änderungen - 1; Eingabetext.Lines := Änderungen[Anzahl_Änderungen]; SetLength(Änderungen, Anzahl_Änderungen); end; |
Danke schonmal
---
Moderiert von
Narses: Beiträge zusammengefasst---
Okay ich hab eine Boolean Variable eingeführt (hätte ich vorher drauf kommen müssen >.<) :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var Änderungen: Array of TStrings; Anzahl_Änderungen: Integer; Abbrechen: Boolean procedure TEingabetext_Formular.EingabetextChange(Sender: TObject); begin if Abbrechen = False then begin Anzahl_Änderungen := Anzahl_Änderungen + 1; SetLength(Änderungen, Anzahl_Änderungen); Änderungen[Anzahl_Änderungen] := Eingabetext.Lines; end; end; procedure TEingabetext_Formular.RückgängigClick(Sender: TObject); begin Abbrechen := True; Eingabetext.Lines.Clear; Anzahl_Änderungen := Anzahl_Änderungen - 1; Eingabetext.Lines := Änderungen[Anzahl_Änderungen - 1]; SetLength(Änderungen, Anzahl_Änderungen); Abbrechen := False; end; |
Allerdings erscheint immer noch die gleiche Fehlermeldung, vielleicht jemand eine Idee woran das liegen könnte?
"nil kann nicht zu TRichEditStrings zugewiesen werden."
Wird das vielleicht nicht ordentlich eingespeichert? Muss ich vielleicht eine andere Variable / ein anderes Array nehmen??