我有一个包含4个编辑框和一个备忘录的表单,并试图找出如何实现多个撤销和重做,例如- 所以如果用户在编辑3、1、2、备忘录中输入文本,然后在编辑4中,我想要按相反的顺序撤销,并按原始顺序重做。 但是我不确定如何跟踪顺序。对此的任何帮助都将不胜感激 我正在使用Delphi 7
最简单的方法是捕获所有包含控件的变化并记录它们的状态(内容、选择和光标位置)。每次进行更改时,都要这样做,这样就会有一个撤销堆栈。现在当您需要撤消操作时,您可以将所有控件恢复到它们保存的状态。这种方案可能会占用相当多的资源,一旦实施,您会希望通过仅保存差异或特定控件上执行的最后一个操作来进行优化。问题在于:(a) 标准编辑/备忘录不能提供有关已更改内容的确切信息,因此您需要以某种方式计算更改(例如,通过将其与先前记录的状态进行比较,但这意味着您需要从初始状态开始重建内容,并通过所有更改,然后将当前-1状态与当前状态进行比较,才能找出更改)。(b) 标准控件自行处理撤消操作,用户可以还原一个控件,从而破坏您的撤销堆栈的顺序。也许您可以使用一些第三方编辑/备忘录控件,它们可能更容易满足您的需求,并且会让您控制撤消/重做操作。例如,我曾经为LMD Innovative拥有的LMD ElPack创建了TElEdit控件,该控件在其他功能之外还具有撤消/重做堆栈,我知道如何对TElEdit的源代码进行轻微修改以帮助您。您可能需要查看TElEdit或其他类似组件以了解它们能为您提供什么。