行を削除してから新しい行をTSynMemoに挿入すると、UndoListとRedoListをどのように更新してSynMemo.Undoで元に戻すことができますか?行の削除と挿入時にSynMemoの元に戻す/やり直しリストを更新するには
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パラメータの設定に関するガイダンスはありません。 2つの "アクション"を組み合わせて、 "結合された"アクションのためのアンドゥとリドゥが1つだけ存在するようにしてください。 - "Insert and Delete"オプションeoGroupUndo = True。
'Editor.UndoList.AddChange()'を参照してください。 – ComputerSaysNo
@Dorin:既に成功していないAddChangeを試しました。私の編集を参照してください... – Bill
ああ、私はそれが内部で元に戻す/やり直しを処理する方法を見て、私はかなりあなたがそこからどこかに得ることができると確信していることをお勧めします – ComputerSaysNo