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