如果删除一行,然后在 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;
编辑 我试过这个,但撤消和重做不能正常工作......我的意思是在撤消之后,该行没有恢复到操作之前的状态。
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 的“插入和删除”。