很菜的问题,关于'撤消'与'重做'的功能怎么实现!(50分)

  • 主题发起人 主题发起人 吃天大圣
  • 开始时间 开始时间

吃天大圣

Unregistered / Unconfirmed
GUEST, unregistred user!
许多文字编辑软件都提供了‘撤消’与‘重做’的功能,请问各位怎么实现
它?
 
你可以在程序中定义一个数组,然后把修改时的数据(一般情况保存键盘
或MOUSE的操作比较好)存入数组中,然后撤消和重做时调用这些数组(即
类似于调用宏)就行了。另外,RICHEDIT本身就提供这样的功能。
 
TMemo不提供这个功能。
 
有呀, EM_UNDO, 可以发送这个消息,memo 没有 redo,

RichEdit 可能多一些,但还不全, RichEdit20A (richedit 2.0 版要全
delphi 中有消息声明, 但不支持),

to 淡淡的笑:
系统帮你做了一些,自己实现要麻烦的多。
 
用标准的 ActionList 也许能行
 
ActionList,似乎不是这个作用吧?
实际上每个编辑动作都可以用一定的原语加上对象来表示,
例如Delete 'k'这样,就可以把这些编辑动作用一定的数据结构
储存起来,那样就好办了
 
吃天大圣兄:
这个问题好像不太菜啊。
如果只是一步 UNDO ,而且只用标准的文字编辑控件,可以 SendMessage
一个 EM_UNDO 消息,更多的 UNDO/REDO 功能,就只能自己写喽。
有的操作需要占据巨大的内存保存 UNDO 信息,比如全盘删除,有的操作本身就
是不可逆的,还要考虑速度与资源,涉及的方面太多了... ...
呵呵,这个问题可不菜。

From: BaKuBaKu
 
谢谢各位!分少了点,请笑纳!
 
后退
顶部