Delphi-PRAXiS

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.

Dax 9. Aug 2005 02:31

Re: SynEdit Undo/Redo
 
Leite dir doch von TSynEdit eine Komponente ab, die das hat was du brauchst: BeginUndoBlock beim Zugriff auf Lines.Text ;)

Matze 9. Aug 2005 02:35

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?

Delphi-Freak 15. Aug 2005 19:55

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

fkerber 15. Aug 2005 20:01

Re: SynEdit Undo/Redo
 
Hi!

Auch wenn es nicht ganz passt evtl. möchte ich mal auf das Tutorial auf www.dsdt.info hinweisen, dass Undo/Redo komplett selbst implementiert.

Vielleicht ist es ja nützlich!


Ciao Frederic

Delphi-Freak 15. Aug 2005 20:13

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 17: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