Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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; // not implemented yet 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 22.04.12 17:55 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 22.04.12 18:38 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 23.04.12 13:27 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Weil das Undo dann aus dem Undo-Buffer entfernt und beim nächsten Undo die davor ausgeführte Aktion rückgängig gemacht wird. ;-)
Aha. :nixweiss:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 23.04.12 13:42 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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!