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;
编辑
我尝试了这个但是undo和redo无法正常工作……我的意思是在撤消之后线路没有恢复到动作之前的状态.
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,smnormal);SynMemo1.RedoList.EndBlock;
我找不到有关设置StartOfBlock和EdifOfBlock参数的任何指导.应该组合两个“动作”,以便“组合”动作只有一个撤消和重做 – “插入和删除”选项eoGroupUndo = True.
解决方法 虽然我没有使用过TSynMemo,但我确实使用了TSynEdit,我认为处理方式类似.这是我如何做BlockUndo更新:
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,这应该仍然有效.
总结以上是内存溢出为你收集整理的delphi – 删除和插入行时如何更新SynMemo撤消/重做列表全部内容,希望文章能够帮你解决delphi – 删除和插入行时如何更新SynMemo撤消/重做列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)