如果您刪除一行並將新行插入到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。
看看'Editor.UndoList.AddChange()' – ComputerSaysNo 2012-01-18 21:13:19
@Dorin:我已經嘗試了AddChange而沒有成功。看到我的編輯... – Bill 2012-01-18 21:50:47
ouch,那麼我建議看看它在內部處理撤銷/重做的方式,我敢肯定你可以從那裏得到某處 – ComputerSaysNo 2012-01-19 02:32:43