2012-01-18 3 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; 

편집 이 시도하지만, 실행 취소 및 다시 실행은 제가이 의미하는 것은 선이는 행동하기 전에 무엇으로 복원되지 않는 취소 후입니다 ... 제대로 작동하지 않습니다.

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 옵션을 사용하여 "삽입 및 삭제"만 수행해야합니다.

+0

'Editor.UndoList.AddChange()'를보세요 – ComputerSaysNo

+0

@ 도린 : 이미 성공하지 않고 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

관련 문제