Einzelnen Beitrag anzeigen

r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#1

IOTA Undo-Problem

  Alt 2. Jun 2021, 17:09
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
...
  Mit Zitat antworten Zitat