在程序中如何实现Redo 和 Undo 在程序中如何实现Redo 和 Undo很多软件都有这个功能,使用户撤消做错了的操作,可以说这个功能是非常实用的,但是我们在写软件时如何来实现。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像,有的控件有个Undo方法...比如TMemo 使用SendMessage发送消息:SendMessage(Edit1.handle,WM_UNDO,0,0);//UndoSendMessage(Edit1.handle,WM_REDO,0,0);//Undo如果想要知道是否可以UNDO/REDO,则发送消息SendMessage(Edit1.handle,EM_CANUNDO,0,0);//UndoSendMessage(Edit1.handle,EM_CANREDO,0,0);//Can Undo根据返回值判断。 那是对付Edit空间的。如果不是这类空间。一般的方法是准备两个堆栈,一个用来保存Undo操作,另外一个保存Redo操作,每进行一个操作就Undo入栈Redo清栈,每Undo一次就Redo入栈,并且执行其他相应措施。 比如,我画了一条线,又移动了它,放大了它,现要UnDo 我觉得要使用redo和undo最主要的是最初的关于你有哪一些操作以及如何高效的记录这些操作的数据结构的分析,至于实现嘛,用堆栈或者队列都可以很好的实现啊。 用DBExpress TSimpleDataset 的 SavePoint 和 UndoLastChange Ctrl+Z 只能UNDO 一次Undo入栈Redo清栈浪費內存。 用數據庫一步一步保存你的操作,如果UNDO就UndoLastChange??ReDraw!OK?我試過成功了. 首先确定的所作的操作能够被记录和重放,使用一个循环数组作为栈,并且新加一个undo就是push出一条命令,取消执行或者执行其逆指令redo就是read出一条命令,继续执行后再pull入栈。用循环数组是为了操作过多时不溢出。 准备两个堆栈,一个用来保存Undo操作,另外一个保存Redo操作,每进行一个操作就Undo入栈Redo清栈,每Undo一次就Redo入栈,并且执行其他相应措施。对于矢量图形就这样处理可以随便Undo。Redo操作 楼主正在做的正是我做过的,请见下载: http://www.csdn.net/cnshare/soft/13/13995.shtm [注意先把系统时间改为2月20] 用堆栈来解决,还是比较简单的,但是一定要设定一个Undo的限制,只能Undo多少次,并且保存后不能在Undo 请问谁有Delphi 5? 【关于多线程访问控件问题】 纠结网速,散分散灾~~~~ VB版块没人理,只有回老家了,这个VBA错在那里? 请教有关内存操作的问题,谢谢帮助! 什么原因! 紧急求救,有谁用delphi 开发过 snmp 代理啊? 有难度的网络编程问题,请高手帮忙解决 诸位高手:如何知道一个指定计算机上是否有数据源,并列出所有数据源,以及他们的详细信息??? 小妹刚学会一点点,请大家帮帮我,在线等! 有没有使用过ReportPart2.2组件,为何在customer纸张状态下在横向打印时看不到页脚, 请问怎么用递归的方法实现Treeview节点的添加?
SendMessage(Edit1.handle,WM_REDO,0,0);//Undo如果想要知道是否可以UNDO/REDO,则发送消息
SendMessage(Edit1.handle,EM_CANUNDO,0,0);//Undo
SendMessage(Edit1.handle,EM_CANREDO,0,0);//Can Undo
根据返回值判断。
Undo入栈Redo清栈浪費內存。
如果UNDO就UndoLastChange??
ReDraw!
OK?
我試過成功了.
使用一个循环数组作为栈,并且新加一个
undo就是push出一条命令,取消执行或者执行其逆指令
redo就是read出一条命令,继续执行后再pull入栈。用循环数组是为了操作过多时不溢出。
对于矢量图形就这样处理可以随便Undo。Redo操作