![]() |
SynEdit Undo/Redo
:hi: Hi!
Im SynEdit kann man ja per
Delphi-Quellcode:
und
SynEdit1.Undo;
Delphi-Quellcode:
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.
SynEdit1.Redo;
Wie kann ich das Problem umgehen? Manuell alles mitschreiben, was verändert wurde, halte ich für übertrieben. |
Re: SynEdit Undo/Redo
Zitat:
|
Re: SynEdit Undo/Redo
Zitat:
Delphi-Quellcode:
Form1.SynEdit1.SelText := Edit2.Text;
|
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? |
Re: SynEdit Undo/Redo
Ja, das geht glaube ich mit (ob die Befehle genauso sind, weiss ich nicht)
Delphi-Quellcode:
mfG
SynEdit.UndoList.BeginBlock;
// Text ändern... SynEdit.UndoList.EndBlock; mirage228 |
Re: SynEdit Undo/Redo
Spitze, vielen Dank, es klappt einwandfrei. :thumb:
|
Re: SynEdit Undo/Redo
Hmm, geht doch nicht einwandfrei. :roll:
Es geht nur für
Delphi-Quellcode:
So geht es nicht:
Form1.SynEdit1.SelText := Edit2.Text;
Delphi-Quellcode:
Woran liegt das?
Form1.SynEdit1.UndoList.BeginBlock;
Form1.SynEdit1.Text := StringReplace(Form1.SynEdit1.Text, Edit1.Text, Edit2.Text, [rfReplaceAll]); Form1.SynEdit1.UndoList.EndBlock; |
Re: SynEdit Undo/Redo
Zitat:
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. |
Re: SynEdit Undo/Redo
Vielen Dank für die Erklärung, weißt du auch, wie man das umgehen kann?
|
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. |
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