zoukankan      html  css  js  c++  java
  • Word自动化撤销、重做功能

     

    功能需求:

    在监督监理项目的Word报告模块中,要求实现对Word文件内容操作的撤销、重做功能。

    实施方案:

    采用备忘录模式实现。

    要点一:备忘录模式

    应用程序在每次操作之后都改变了他的状态。也就是说一个应用程序一旦被操作,它的状态就会被改变。如果要撤消到以前的状态,在应用程序运行的时候,我们必须存储它的状态。为了支持重做,我们还必须从当前的状态回到下一个状态。

    为了实现撤消存储应用程序的状态以前的状态,为了实现重做存储应用程序的状态下一状态。解决方案就是维护应用程序的状态来实现撤销/重做。在实现中使用可两个栈。一个存放撤消操作的状态,另外一个存放重做操作的状态。执行撤消操作,撤消堆栈弹出 ,就能得到应用程序的前一个状态。执行重做操作,重做堆栈弹出,获取下一个状态。然后用它们来设置应用程序的状态。

    所以,为了实现撤销、重做操作,关键问题就在于如何保存和维护应用程序运行中的各种状态。

    要点二:采用复制到ClipBoard的对象作为操作状态进行记录

      这一点与最初的想法不同。改变想法的主要原因是:Interop.Word下封装的Com对象,没有提供对序列化的支持,从而不能通过深度复制的办法保存操作状态。

      使用状态的关键点:

    (1)       实时记录状态。

    1. 每做一次工具栏上按钮的操作后,都将整个文档的内容选中,复制到剪贴板;
    2. 再由剪贴板获得RTF格式的字符串数据(RTF——>String);
    3. 包装成Memoto对象后,对该对象进行深度复制(序列化/反序列化),得到字符串数据的副本(String——>Memoto对象—>Memoto对象副本);
    4. 将该副本保存在撤销栈中。

    (2)       撤销操作。

    1. 删除当前文档的所有内容;
    2. 撤销栈弹栈,获取前一状态对应的包装对象(Memoto对象——>String);
    3. 由该对象取回前一状态对应的RTF格式的字符串数据,在借助剪贴板,存为剪贴上采用Rtf格式的数据(String——>RTF);
    4. 从剪贴板上将内容复制待文档中,这样便实现了对前一状态的还原。
       

    (3)重做操作。

         与(2)同,此处从略。

  • 相关阅读:
    JAVA NIO 新IO 分析 理解 深入 实例,如何利用JAVA NIO提升IO性能
    史蒂夫·乔布斯的打字技术很烂
    微软庆祝微软鼠标诞生 30 年
    Java、PHP、C、Ruby 语言相互吐槽的搞笑图片
    Android 项目多版本管理
    hdu 1203 解题报告 I NEED A OFFER!
    2013年4月4日星期四清明
    2013年4月1日星期一java字符串处理
    2013年4月5日星期五
    2013年3月30日星期六
  • 原文地址:https://www.cnblogs.com/takeaction/p/2547764.html
Copyright © 2011-2022 走看看