Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi SynEdit Undo/Redo (https://www.delphipraxis.net/39718-synedit-undo-redo.html)

Matze 6. Feb 2005 23:26


SynEdit Undo/Redo
 
:hi: Hi!

Im SynEdit kann man ja per

Delphi-Quellcode:
SynEdit1.Undo;
und

Delphi-Quellcode:
SynEdit1.Redo;
Die letzte Aktion rückgängig machen oder wiederholen. Dies funktioniert jedoch nur, wenn ich direkt im SynEdit schreibe. Füge ich Code per Button o.Ä. ins SynEdit, dann geht das nicht.

Wie kann ich das Problem umgehen? Manuell alles mitschreiben, was verändert wurde, halte ich für übertrieben.

toms 7. Feb 2005 07:01

Re: SynEdit Undo/Redo
 
Zitat:

Die letzte Aktion rückgängig machen oder wiederholen. Dies funktioniert jedoch nur, wenn ich direkt im SynEdit schreibe. Füge ich Code per Button o.Ä. ins SynEdit, dann geht das nicht.
Bei mir geht's auch dann. Wie fuegst du z.B Text ein?

Matze 7. Feb 2005 09:57

Re: SynEdit Undo/Redo
 
Zitat:

Zitat von toms
Bei mir geht's auch dann. Wie fuegst du z.B Text ein?

Mit StringReplace oder auch so:

Delphi-Quellcode:
Form1.SynEdit1.SelText := Edit2.Text;

toms 7. Feb 2005 10:05

Re: SynEdit Undo/Redo
 
StringReplace werden anscheinend nicht in die Undo, Redo Liste genommen.
Nur was der User macht (Copy, Paste, Cut...)

Vielleicht kann man sich aber in die Undo, Redo Listen einklinken?

mirage228 7. Feb 2005 10:08

Re: SynEdit Undo/Redo
 
Ja, das geht glaube ich mit (ob die Befehle genauso sind, weiss ich nicht)

Delphi-Quellcode:
SynEdit.UndoList.BeginBlock;
// Text ändern...
SynEdit.UndoList.EndBlock;
mfG
mirage228

Matze 7. Feb 2005 10:35

Re: SynEdit Undo/Redo
 
Spitze, vielen Dank, es klappt einwandfrei. :thumb:

Matze 8. Feb 2005 11:11

Re: SynEdit Undo/Redo
 
Hmm, geht doch nicht einwandfrei. :roll:

Es geht nur für
Delphi-Quellcode:
Form1.SynEdit1.SelText := Edit2.Text;
So geht es nicht:
Delphi-Quellcode:
  Form1.SynEdit1.UndoList.BeginBlock;
  Form1.SynEdit1.Text := StringReplace(Form1.SynEdit1.Text, Edit1.Text, Edit2.Text, [rfReplaceAll]);
  Form1.SynEdit1.UndoList.EndBlock;
Woran liegt das?

Sharky 8. Feb 2005 11:40

Re: SynEdit Undo/Redo
 
Zitat:

Zitat von Matze
...Woran liegt das?

Hai Matze,
ich habe mir mal eben den QuellCode angeschaut. Es scheint so das z.B. bei SelText intern ein BeginUndoBlock; aufgerufen wird. Bei Zugriff auf .Lines.Text geschieht dies leider nicht.

Matze 8. Feb 2005 11:41

Re: SynEdit Undo/Redo
 
Vielen Dank für die Erklärung, weißt du auch, wie man das umgehen kann?

Matze 9. Aug 2005 01:40

Re: SynEdit Undo/Redo
 
Moin! Ich pushe mal nach der doch recht kurzen Zeit. :mrgreen:

Ich bin nun wieder auf das Problem gestoßen und es ist tatsächlich so, wie Sharky es geschrieben hat. UndoList.BeginBlock; und UndoList.EndBlock; reagieren wirklich nur auf SelText.

Wenn ich sonst etwas einfüge, ohne, dass Text markiert war, funktioniert Undo nicht mehr. Ich dachte schon, ich markiere den Buchstaben neben dem Caret intern, ändere das, wobei der Buchstabe überschrieben wird und anschließend füge ich diesen wieder ein. Nur ist das für mich eine zu schlampige Lösung, die ich nicht verwenden möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz