Если вы удалите строку, а затем вставите новую строку в 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.