Hallo!
Mit folgendem einfachen Code tauscht mein IOTA-
Package den CommentText einer Codezeile ab einer bestimmten Caret-Position bis zum jeweiligen Zeilenende durch einen neuen Text aus:
Delphi-Quellcode:
TopView := (BorlandIDEServices As IOTAEditorServices).TopView;
oldCaretX := TopView.Buffer.EditPosition.GetColumn;
oldCaretY := TopView.Buffer.EditPosition.GetRow;
TopView.Buffer.EditPosition.Move(spcCaretLine,spcCaretCol);
J := Length(QuellCodeAnsiStrList.Strings[spcCaretLine-1]) - spcCaretCol +1;
if J > 0 then TopView.Buffer.EditPosition.Delete(J);
if length(newCommentString) > 0 then
TopView.Buffer.EditPosition.InsertText(newCommentString);
TopView.Buffer.EditPosition.Move(oldCaretY,oldCaretX);
So weit so gut. Nur - wenn ich so einen Vorgang dann aber anschließend per
IDE-Undo-Funktion rückgängig mache (per Ctrl-Z-Key oder Mausklick auf die UndoButton), dann wird dieser Undo-Akt eine ziemlich chaotische Sache, welche dann erst oft nach so 10-20 Klicks endet. Zwischendrin springt dann der Caret ganz gerne mal irgendwo in die Gegend, gerne auch mal an den
Unit-Anfang insgesamt, um dann nach dem gefühlten "zigten" UndoButton-Klick endlich plötzlich doch wieder an der aufeinmal wiederhergestellten Ausgangszeile aufzutauchen.
Ich habe mir schon überlegt, ob das event. auch was mit meinem IOTA-Code zu tun haben könnte, mittels dem ich diesen Text mit einem anderen austausche. Aber der diesbezügliche IOTA-Code ist eigentlich so einfach, dass der so eine Undo-Irrung kaum verursacht haben könnte.
Gibts event. eine Möglichkeit, diesen Undo-Buffer selbst irgendwie zu manipulieren, bzgl. irgendwelcher Teilarbeiten ein- oder auszuschalten etc..
Bzw. man müsste das Undo so einstellen können, dass er alle ZwischenPositionen des Carets einfach unterdrückt und nur tatsächliche Textänderungen umsetzt. Vllt. noch mit einer einzigen Caret-Positionierung zu diesem TextänderungsOrt davor. Aber das müsste es dann gewesen sein, weil, wie gesagt, alles andere ziemlich schnell in Chaos ausartet.
Thx im Voraus
...