delphi – 删除和插入行时如何更新SynMemo撤消重做列表

delphi – 删除和插入行时如何更新SynMemo撤消重做列表,第1张

概述如果删除一行然后在TSynMemo中插入一个新行,如何更新UndoList和RedoList以便可以使用SynMemo.Undo撤消更改? SynMemo1.BeginUpdate;iLineIndex := SynMemo1.Lines.IndexOf( SynMemo1.LineText );SynMemo1.Lines.Delete( iLineIndex );iStartTag := 如果删除一行然后在TSynMemo中插入一个新行,如何更新UndoList和RedoList以便可以使用SynMemo.Undo撤消更改?

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撤消/重做列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1271470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存