Autor |
Beitrag |
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 22.04.12 17:26
Hallo!
Bin gerade am Basteln an einem Syntaxeditor, ich verwende dazu TJvWideHLEditor von den Jedis. Doch weder bei dieser Komponente noch bei TJvHLEditor gibt es ein Redo! CanRedo ist immer False und Redo tut einfach nichts.
In der Datei JvEditorCommon.pas habe ich die Zeile
procedure Redo; gefunden, damit ist alles klar.
2x hintereinander Undo aufzurufen bewirkt nichts.
Also möchte ich ein Redo selbst schreiben. Wie kann ich ausser mit einer temporären Datei eine Redo-Funktion selbst realisieren? Dachte zunächst an eine Art Liste mit den geänderten Zeilen, die ich dann zurückschreibe, aber das ist mir zu aufwändig und umständlich: Wo trage ich was in diese Liste ein usw.? Und eine Kopie des gesamten Textes in einer TStringList oder so zu halten, nur um zB. ein Zeichen wiederherzustellen, das zuvor mit Undo geändert wurde, ist ja nun völlig übertrieben.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.04.12 17:48
Ich habe mal kurz einen Blick in den Quelltext geworfen, da ist aber schon einiges in der Richtung implementiert. Im Grunde muss der Undo-Buffer beim Undo entsprechend wieder für die andere Richtung gespeichert werden. Die entsprechenden Daten und Strukturen sind soweit ich das sehe schon vorhanden.
Eine Herausforderung sind hier aber Kombinationen aus Rückgängig und Wiederherstellen. Wenn man das ein paarmal hin und her macht und vielleicht auch noch etwas dazwischen ändert, soll ja der Buffer dennoch konsistent sein.
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 22.04.12 17:55
jaenicke hat folgendes geschrieben : | Im Grunde muss der Undo-Buffer beim Undo entsprechend wieder für die andere Richtung gespeichert werden. Die entsprechenden Daten und Strukturen sind soweit ich das sehe schon vorhanden. |
Meinst du direkt in der Prozedur TJvUndoBuffer.Undo?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.04.12 18:27
Zum Beispiel, ja. Dort siehst du z.B., dass es Gruppen von Änderungen gibt usw.
Das muss ja beim Redo auch alles behandelt werden.
Zudem fehlt soweit ich das sehe der Redo-Buffer noch komplett, den musst du wie schon geschrieben aus dem Undo-Buffer aufbauen.
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 22.04.12 18:38
jaenicke hat folgendes geschrieben : | Zum Beispiel, ja. Dort siehst du z.B., dass es Gruppen von Änderungen gibt usw.
Das muss ja beim Redo auch alles behandelt werden.
Zudem fehlt soweit ich das sehe der Redo-Buffer noch komplett, den musst du wie schon geschrieben aus dem Undo-Buffer aufbauen. |
Das ist mir zu hoch. Ich steig' durch den Code nicht durch...
Aber vielleicht komme ich so weiter: Warum bewirken 2 Undo's hintereinander nicht ein Redo? Ich meine, das Undo vom Undo müsste doch ein Redo sein?
Es sollte so wie Checked := not Checked funktionieren.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.04.12 20:09
Weil das Undo dann aus dem Undo-Buffer entfernt und beim nächsten Undo die davor ausgeführte Aktion rückgängig gemacht wird. 
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 23.04.12 13:27
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 23.04.12 13:30
Vielleicht wäre ja Synedit eine Alternative ...
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 23.04.12 13:42
bummi hat folgendes geschrieben : | Vielleicht wäre ja Synedit eine Alternative ... |
Der Witz ist ja, dass ich bereits einen Syntaxeditor auf Basis von Synedit habe, aber nun eben die Jedis installiert habe und damit etwas machen wollte! Ich komme aber drauf, dass SynEdit viel mehr Highlighter unterstützt und auch insgesamt mehr Funktionialität bietet. Bei sehr grossen Dateien ist es allerdings etwas träge.
Ich dachte, die Jedi-Komponenten seien besser, stattdessen sind die (zumindest JvHLEdit) nicht mal fertig ausprogrammiert...
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 25.04.12 18:52
Habe dazu etwas gefunden, funktioniert mit TMemo und TRxRichEdit, leider aber nicht mit TSynEdit und JvWideHLEditor:
development.mwcs.de/tutundoredo.html
Liegt wohl am Vorfahrtyp - bei "Memo-artigen" Komponenten klappt es.
Konnte weder mit TSynEdit noch mit JvWideHLEditor etwas erreichen, jedesmal kommt es bei Undo zu einer "Zugriffsverletzung bei XXX: Schreiben von Adresse XXX".
Hat jemand eine Idee, wie man das hinbiegen kann?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|