Как вы обновляете SynMemo Undo / RedoList при удалении и вставке строки

Если вы удалите строку, а затем вставите новую строку в TSynMemo, как вы обновите UndoList и RedoList, чтобы изменения можно было отменить с помощью SynMemo.Undo?

SynMemo1.BeginUpdate;
iLineIndex := SynMemo1.Lines.IndexOf( SynMemo1.LineText );
SynMemo1.Lines.Delete( iLineIndex );
iStartTag := SourceStyleComboBox1.CurText;
iEndTag := SourceStyleComboBox1.CurText;
System.Insert( '/', iEndTag, 2 );
iHTML := iStartTag + iElement + iEndTag;  
SynMemo1.Lines.Insert( iLineIndex, iHTML );
SynMemo1.EndUpdate;

EDIT Я пробовал это, но отмена и повтор не работают правильно ... я имею в виду, что после отмены строка не восстанавливается до того, что было до действий.

StartOfBlock.Line := SynMemo1.CaretY;
StartOfBlock.Char := 0;
EndOfBlock.Line := SynMemo1.CaretY;
EndOfBlock.Char := Length( iHTML );
SynMemo1.UndoList.BeginBlock;
SynMemo1.UndoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.UndoList.EndBlock;
SynMemo1.RedoList.BeginBlock;
SynMemo1.RedoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.RedoList.EndBlock;

Я не могу найти никаких указаний по настройке параметров StartOfBlock и EdifOfBlock. Два «действия» должны быть объединены так, чтобы была только одна отмена и повтор для «комбинированного» действия - «Вставить и удалить» с опцией eoGroupUndo = True.

6
задан Bill 18 January 2012 в 22:24
поделиться