行を削除して 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 パラメーターの設定に関するガイダンスが見つかりません。2 つの「アクション」を結合して、「結合」アクションの元に戻すとやり直しが 1 つだけになるようにする必要があります。オプション eoGroupUndo = True を使用した「挿入と削除」です。