![]() |
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. |
Re: SynEdit Undo/Redo
Leite dir doch von TSynEdit eine Komponente ab, die das hat was du brauchst: BeginUndoBlock beim Zugriff auf Lines.Text ;)
|
Re: SynEdit Undo/Redo
Danke Dax, das wäre eine Möglichkeit. Nur muss ich zugeben, habe ich eigentluich nicht vor, mir meine Komponenten noch selbst zu basteln. :roll:
Ist es denn so, dass es mit dem SynEdit an sich nicht funktionieren kann? |
Re: SynEdit Undo/Redo
Hi!
Bin jetzt auf das gleiche Problem gestoßen, aber zumindestens weiß ich jetzt diese ^^ Methode mit der Selektion. Das Problem dürfte sein, herauszufinden, was sich wirklich in den Lines geändert hat. Ich glaube, der speichert in der UndoList nämlich nur, was sich geändert hat, nicht immer die ganze Datei. Sonst wäre das auch viel zu Speicheraufwänig und unperformant. Soweit habe ich mir das halt zusammengereimt. Aber wenn du mal diese Erweiterung schreiben solltest, die die beiden Versionen vergleicht und demnach dann was in die UndoList schreibt, dann lass mich auch davon wissen :stupid: ReadUl8er, Gerhard |
Re: SynEdit Undo/Redo
Hi!
Auch wenn es nicht ganz passt evtl. möchte ich mal auf das Tutorial auf ![]() Vielleicht ist es ja nützlich! Ciao Frederic |
Re: SynEdit Undo/Redo
Danke mal, aber ich bleibe trotzdem lieber bei meinem Synedit und mache das über SelText - ist einfacher :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 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