- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 4 个编辑框和一个备忘录的表单,我正在尝试弄清楚如何实现多个撤消重做,例如 -
因此,如果用户在编辑 3,1,2、备忘录中输入文本,然后编辑 4,我想按反转顺序撤消,并按原始顺序重做。
但是我不太确定如何跟踪订单。对此的任何帮助将不胜感激
我使用的是Delphi 7
最佳答案
最简单的方法是捕获对任何包含的控件的任何更改,并一起记下所有 4 个控件的状态(内容、选择、插入符位置)。对每个更改都执行此操作,您就会有一个撤消堆栈。现在,当您需要撤消操作时,您可以将所有控件恢复到保存的状态。
此方案可能非常消耗资源,一旦实现,您可能希望通过仅保存差异或在特定控件上完成的最后操作来优化它。问题是
(a) 标准编辑/备忘录不会为您提供有关具体更改内容的信息,因此您需要以某种方式计算更改(例如,通过将其与之前记录的状态进行比较,但这意味着您需要从初始状态“重建”内容并完成所有更改,然后将 current-1 状态与当前状态进行比较以找出更改,
(b) 标准控件自行处理撤消操作,用户可以恢复一个控件,从而破坏撤消堆栈的顺序。
也许您可以使用一些第三方编辑/备忘录控件,它们会更能满足您的需求,并让您控制撤消/重做操作。例如,我曾经为ElPack(现在由LMD Innovative拥有的LMD ElPack)创建了TElEdit控件,并且该控件在其他功能中具有撤消/重做堆栈,并且我知道TElEdit如何帮助您对其源代码进行轻微修改。您可能想检查 TElEdit 或其他类似组件,看看它们能为您提供什么。
关于delphi - 如何实现多次Undo/Redo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293360/
我有一个带有 4 个编辑框和一个备忘录的表单,我正在尝试弄清楚如何实现多个撤消重做,例如 - 因此,如果用户在编辑 3,1,2、备忘录中输入文本,然后编辑 4,我想按反转顺序撤消,并按原始顺序重做。
我正在开发一个具有富文本编辑器功能的应用程序。在 ZSSRichTextEditor 之上我已经编写了我的编辑器代码。这里我的编辑器是 UIWebView,它将被 javascript 代码注入(in
我在 JavaScript 中使用正则表达式验证日期,但是当我运行 SonarQube 进行代码分析时。它将正则表达式显示为安全漏洞。 示例 1: 下面是正则表达式模式(链接到正则表达式的来源 htt
正则表达式: ^\d+(\.\d+)*$ 我试图打破它: 1234567890.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.
我最近遇到了一些重做攻击问题。 简单步骤讲解 :Regex denial of services :这意味着攻击者可以放置一些恶意/精心设计的输入来使您的服务器无法停止找到正确的模式,从而占用您的整个
当我在上面明确声明时,我在 main.cpp 上遇到 redo char(粗体)错误。我还想知道为什么它要求我在 using namespace std 前面放一个分号,因为我以前从未这样做过。 //
我试图重新创建 regular expression denial of service attack using (a+)+ regexp and aaaaaaaaaaaaaaaaaaaaaaaaa
Undo/Redo 的最佳数据结构是什么,(ctrl+z , ctrl+y) ?前几天我们老师说栈最适合undo,但是我在想双链表 .. 有没有其他数据结构能以更好的质量达到我们的目的?或这两者之一引
pycharm中出现一条消息 缺少键盘映射 找不到键盘映射“Windows 正确重做” 我不知道这个消息是什么意思以及如何解决它。请帮忙 最佳答案 您应该打开 Windows Proper Redo.
在我的理解中,mysql binlog 完全可以作为 InnoDB 的重做日志。 那么,启用binlog后,为什么InnoDB还要同时写redo log而不是直接切换使用binlog呢?这不会显着降低
这是 W3C HTML spec 建议用于电子邮件验证的正则表达式模式: ^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0
我创建了一个自定义 QPushButton,允许从菜单或 QColorDialog 中选择颜色。由于它是“主题”编辑器的一部分,我还添加了对 QUndoStack 的支持:每次更改自定义按钮的颜色时,
我有一个文件夹 (MY_FILES),其中包含大约 500 个文件,并且每天都会收到一个新文件并将其放置在那里。每个文件的大小约为 4Mb。 我刚刚开发了一个简单的“void main”来测试我是否可
我正在阅读有关 ReDOS 的内容。 https://en.wikipedia.org/wiki/ReDoS 如果您在 Node.js 中运行此代码,似乎: console.time('aaa');
我正在学习 Python,我遇到了一种情况,我想使用迭代器中的项目。棘手的部分是在某些条件下,我想“取消迭代”。也就是说,在我循环之前将一个项目放回迭代器的前面。 例如,假设我正在从树上摘苹果。我的果
前言 最开始了解mysql实现的时候,总听到redo log, wal(write-ahead logging),undo log这些关键词,了解到redo log主要是用于实现事务的持久化的。为
我需要实现 undo和 redo我的应用程序中的功能。我发现最简单的方法(?)是使用 openlayers undo和 redo内置功能。 -> http://dev.openlayers.org/d
我想向我的 Mac 应用程序添加撤消/重做功能。该应用程序可与笔记一起使用,我想在用户删除笔记时添加“撤消”操作。 这工作得很好,“撤消删除注释”菜单在用户删除注释后变为事件状态,但是在使用“撤消删除
我也在 Qt 论坛中发布了这个问题,here 我正在尝试在我的应用程序中执行撤消和重做命令。我有一个 QTreeWidget,我想让用户撤消和重做一个操作(例如,更改 QTreeWidget 中 QT
我试图在我的 mfc 应用程序中创建重做/撤消功能,但是当我试图撤消 CLine 对象时 - 它无法正常工作。我做错了什么?对不起我的英语! void CKonokhovDoc::OnEditUndo
我是一名优秀的程序员,十分优秀!