在程序中如何实现Redo 和 Undo很多软件都有这个功能,使用户撤消做错了的操作,可以说这个功能是非常实用的,
但是我们在写软件时如何来实现。

解决方案 »

  1.   

    好像,有的控件有个Undo方法...比如TMemo
      

  2.   

    使用SendMessage发送消息:SendMessage(Edit1.handle,WM_UNDO,0,0);//Undo
    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
    根据返回值判断。
      

  3.   

    那是对付Edit空间的。如果不是这类空间。一般的方法是准备两个堆栈,一个用来保存Undo操作,另外一个保存Redo操作,每进行一个操作就Undo入栈Redo清栈,每Undo一次就Redo入栈,并且执行其他相应措施。
      

  4.   

    比如,我画了一条线,又移动了它,放大了它,现要UnDo
      

  5.   

    我觉得要使用redo和undo最主要的是最初的关于你有哪一些操作以及如何高效的记录这些操作的数据结构的分析,至于实现嘛,用堆栈或者队列都可以很好的实现啊。
      

  6.   

    用DBExpress TSimpleDataset 的 SavePoint 和 UndoLastChange
      

  7.   

    Ctrl+Z 只能UNDO 一次
    Undo入栈Redo清栈浪費內存。
      

  8.   

    用數據庫一步一步保存你的操作,
    如果UNDO就UndoLastChange??
    ReDraw!
    OK?
    我試過成功了.
      

  9.   

    首先确定的所作的操作能够被记录和重放,
    使用一个循环数组作为栈,并且新加一个
    undo就是push出一条命令,取消执行或者执行其逆指令
    redo就是read出一条命令,继续执行后再pull入栈。用循环数组是为了操作过多时不溢出。
      

  10.   

    准备两个堆栈,一个用来保存Undo操作,另外一个保存Redo操作,每进行一个操作就Undo入栈Redo清栈,每Undo一次就Redo入栈,并且执行其他相应措施。
    对于矢量图形就这样处理可以随便Undo。Redo操作
      

  11.   

    楼主正在做的正是我做过的,请见下载:  http://www.csdn.net/cnshare/soft/13/13995.shtm     [注意先把系统时间改为2月20]
      

  12.   

    用堆栈来解决,还是比较简单的,但是一定要设定一个Undo的限制,只能Undo多少次,并且保存后不能在Undo