2012-01-18 9 views
5

行を削除してから新しい行を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。

+0

'Editor.UndoList.AddChange()'を参照してください。 – ComputerSaysNo

+0

@Dorin:既に成功していないAddChangeを試しました。私の編集を参照してください... – Bill

+0

ああ、私はそれが内部で元に戻す/やり直しを処理する方法を見て、私はかなりあなたがそこからどこかに得ることができると確信していることをお勧めします – ComputerSaysNo

答えて

0

私はTSynMemoを使用していませんが、TSynEditを使用していますが、処理が似ていると思います。

ActiveEditor.SynEditor.BeginUpdate; 
try 
    //This tells SynEdit to mark all upcoming changes as a single block 
    ActiveEditor.SynEditor.BeginUndoBlock; 
    try 

    {Any change made here is recorded for undo purposes} 
    {Buffer changes (Adding/Editing/Deletion of lines), caret pos changes, etc} 

    finally 
    //This completes the undo block. 
    ActiveEditor.SynEditor.EndUndoBlock; 
    end; 
finally 
    ActiveEditor.SynEditor.EndUpdate; 
end; 

は私が BeginUndoBlock/ EndUndoBlock機能がTSynEdit上に存在するが、TSynMemoが実際にTSynEditから下降しているため、これはまだ動作するはずと信じて:

は、これは私がBlockUndoの更新を行う方法です。

+0

残念ながら、これは動作しません。 – kol

関連する問題