我开发一文档系统,用户要求修改了的内容留下痕迹,WORD中有"接受和拒绝修订"功能,可以控被修改内容显示/不显示功能.用户要求用DELPHI按钮方式控制它。望各位师兄救我小弟一命。最好写一段示例给我。谢谢!!!!

解决方案 »

  1.   

    你可以录制WORD中这个功能的宏代码,然后把VBA代码转换到DELPHI中使用就可以了。
      

  2.   

    如何把VBA代码转换到DELPHI中,能否详细点,我没有转个.
      

  3.   

    下面就如何在 Delphi 里面利用 Word 的 VBA 代码进行一些总结。 1 、     生成 VBA 代码。 Word 本身具有很强的可扩展性 ,尤其是支持用户自定义功能 ,其实现 的主要方式就是通过 VBA 代码来实现的。在 " 工具 -> 宏 ->Visual Basic 编辑器 " 里面就可以看 到具体的宏代码 ,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是 选择 " 工具 -> 宏 -> 录制新宏 ",然后执行自己想通过程序实现的功能 ,如存盘、打印等功能 ,此时 Word 一边执行你要实现功能 ,一边将你的操作生成了一个宏 ,在实现功能后 ,可以选择 " 工具 -> 宏 ->VisualBasic 编辑器 ",查看生成的宏代码。 
    例如 : 我们要将文档中的 " 讨论 " 全部替换成 " 研讨 " 。 a .     点击 " 工具 -> 宏 -> 录制新宏 ",直接点击确定 ,默认的宏保存到了 Normal.dot 系统公 用模板里面。 b .     点击 " 编辑 -> 查找 ",出现弹出对话框 ,输入查找和替换的字 ,点确定。进行替换。 c .     结束宏的录制 ,点击结束按钮。 d .     按 F11 或者 " 工具 -> 宏 ->Visual Basic  编辑器 ",查看宏代码。缺省查看 Normal 里面 的模块里面的 NewMacros 模块。 以下是生成的宏代码 :Sub Macro1()'' Macro1 Macro'  宏在  2002-2-1  由  yzhshi  录制 '    Selection.Find.ClearFormatting    Selection.Find.Replacement.ClearFormatting    With Selection.Find        .Text = " 讨论 "        .Replacement.Text = " 研讨 "        .Forward = True        .Wrap = wdFindContinue        .Format = False        .MatchCase = False        .MatchWholeWord = False        .MatchByte = True        .MatchWildcards = False        .MatchSoundsLike = False        .MatchAllWordForms = False    End With    Selection.Find.Execute Replace:=wdReplaceAllEnd Sub2 、     精简宏代码。通常 ,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要 做的就是如何找到我们需要的代码。此时我们查看具体的代码 ,剔除明显没有用途的代码 ,然后光 标停留在宏上面 ,按 F5 执行 ,看是否实现功能 ,逐步精简 ,得到最小代码。此步骤可参考 Word 的 VBA 帮助来判断代码是否有用。 
    如上例 ,精简下来 ,剩下以下代码。 Sub Macro1()    Selection.Find.ClearFormatting    Selection.Find.Replacement.ClearFormatting    With Selection.Find        .Text = " 讨论 "        .Replacement.Text = " 研讨 "    End With    Selection.Find.Execute Replace:=wdReplaceAllEnd Sub
    3 、     转换成 Delphi 代码。这一步其实很简单 ,对于 VBA 代码 ,只需要在前面添加 Word 的句柄或者 文档的句柄或者文档的句柄 .Application 就可以直接操作了。 例 : 逐句翻译 :(Word_Handle 是 Word 的句柄 )(VB)     Selection.Find.ClearFormatting(Delphi)  Word_Handle.Selection.Find.ClearFormatting;
    (VB)     Selection.Find.Replacement.ClearFormatting(Delphi)  Word_Handle.Selection.Find.Replacement.ClearFormatting;以上两句简单添加上 Word 的句柄就可以了。 
    (VB)     With Selection.Find              Text = " 讨论 "              Replacement.Text = " 研讨 "End With(Delphi)  Word_Handle.Selection.Find.Text := ' 讨论 ';  Word_Handle.Selection.Find.Replacement.Text := ' 研讨 ';以上几句因为 Delphi 不支持 Variant 的 With 结构 ,所以分开写。同时转换成 Delphi 语法。 
    (VB)    Selection.Find.Execute Replace:=wdReplaceAll(Delphi) Word_Handle.Selection.Find.Execute(Replace:=2);上面一句存在一个小技巧 ,如何找到常量 wdReplaceAll 的数值为 2 ? 这里有几个办法 ,一 : 直接 use Word2000 或者 word97 单元 ,那么直接使用常量 wdReplaceAll 就可以了 ;二 : 到 Word2000.pas 或者 Word97.pas 里面查找 wdReplaceAll 的数值 ;三 : 直接使用 VBA 代码见 wdReplaceAll 的数值显示出来。办法是写一个小过程 ,然后执行 ,如下 :Sub ShowValue()  MsgBox wdReplaceAllEnd Sub
    最后补充一下 ,很多关于 Word 的东西可以从 Word 的 VBA 帮助里面获得。具体文件在 ?:\Program files\Microsoft Office\Office10\2052(XP) 下 ,VBAWD10.CHM,其他版本路径基本类似。 
      

  4.   

    很高兴你的帮助,不过word200中菜单在:工具-->修订-->接受或拒绝所有修订/接受修订/拒绝修订;不能录制成宏,但你说的行"查找"能够录制成宏.这是为什么?我搞不懂.
      

  5.   

    能录制,我录到这句:
    WordBasic.AcceptAllChangesInDoc你重新看看。
      

  6.   

    非常感谢你,在你帮助下我已可以控制修改痕迹不显示了,但是要显示我还不清楚.控制不显示(Delphi)中写:WordDocument.AcceptAllRevisions;OK1,我还在研究...
      

  7.   

    我把这些命令用了,WordDocument.AcceptAllRevisions; WordDocument.Activate; WordDocument.RejectAllRevisions 都不能行,可以控制修改痕迹不显示了,但要显示出修改痕迹没有办法.交不了差.