文字录入无限制Undo,Redo的实现

12 篇文章 0 订阅
10 篇文章 0 订阅

这里只针对Edit的内容做一个简单的undo,redo功能;

原理就是,将新增字符和相关信息添加到undo列表,在undo动作时,取记录信息,并在edit中删除新增的字符,然后将此动作添加到redo列表,以便恢复。

 

本程序只对文本框文字的顺序增加做了处理,对于任意位置的删除,复制粘贴等没有进行处理,大家可以根据实际情况完善,增加辅助信息来完成对撤销和恢复的操作。

 

明白了原理,对于其他的操作都是这个道理,比如你画图什么的,保留每个图形的相关信息,然后撤销恢复重画,说的简单,做起来还是需要我们动脑子的^_^

 

为方便查看,将所有代码写到了一个单元。

 

Delphi代码

 

C#代码

 

VC代码

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
SQLite3 是一个轻量级的数据库,它提供了一些基本的事务支持,但是并没有原生的 undo redo 功能。不过,我们可以通过自己编写代码来实现这些功能。 首先,我们需要创建一个表来保存历史记录,包括每个操作的 SQL 语句、操作时间等信息。例如: ```sql CREATE TABLE history ( id INTEGER PRIMARY KEY, sql TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` 然后,我们可以在每次执行 SQL 语句之前,将该语句插入到历史记录表中: ```python import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() def execute(sql): cursor.execute(sql) conn.commit() cursor.execute("INSERT INTO history (sql) VALUES (?)", (sql,)) conn.commit() ``` 现在,我们可以实现 undoredo 功能。undo 操作可以通过删除最后一条历史记录,并执行该记录的相反操作来实现redo 操作可以通过重新执行下一条历史记录来实现。例如: ```python def undo(): cursor.execute("SELECT * FROM history ORDER BY id DESC LIMIT 1") row = cursor.fetchone() if row: sql = row[1] cursor.execute(sql) cursor.execute("DELETE FROM history WHERE id=?", (row[0],)) conn.commit() def redo(): cursor.execute("SELECT * FROM history ORDER BY id ASC LIMIT 1") row = cursor.fetchone() if row: sql = row[1] cursor.execute(sql) cursor.execute("DELETE FROM history WHERE id=?", (row[0],)) conn.commit() ``` 这样,我们就可以实现基本的 undo redo 功能了。当然,这只是一个简单的示例,实际情况可能更加复杂,需要根据具体需求进行调整。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值