救命!用DELPHI控制WORD中被修改内容是否显示 我开发一文档系统,用户要求修改了的内容留下痕迹,WORD中有"接受和拒绝修订"功能,可以控被修改内容显示/不显示功能.用户要求用DELPHI按钮方式控制它。望各位师兄救我小弟一命。最好写一段示例给我。谢谢!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以录制WORD中这个功能的宏代码,然后把VBA代码转换到DELPHI中使用就可以了。 如何把VBA代码转换到DELPHI中,能否详细点,我没有转个. 下面就如何在 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 Sub3 、 转换成 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,其他版本路径基本类似。 很高兴你的帮助,不过word200中菜单在:工具-->修订-->接受或拒绝所有修订/接受修订/拒绝修订;不能录制成宏,但你说的行"查找"能够录制成宏.这是为什么?我搞不懂. 能录制,我录到这句:WordBasic.AcceptAllChangesInDoc你重新看看。 非常感谢你,在你帮助下我已可以控制修改痕迹不显示了,但是要显示我还不清楚.控制不显示(Delphi)中写:WordDocument.AcceptAllRevisions;OK1,我还在研究... 我把这些命令用了,WordDocument.AcceptAllRevisions; WordDocument.Activate; WordDocument.RejectAllRevisions 都不能行,可以控制修改痕迹不显示了,但要显示出修改痕迹没有办法.交不了差. dll窗体左上角的图片为什么不能显示呢? 求在不同窗体传递数值的问题 请教sql自动编号的问题 刚刚跟人谈了个项目,现在到了议价的时候,请前辈指点! 谁能给一个在ClientDataSet中修改、添加记录后然后再回写数据库的例子? 关于DBGrid的简单操作!!!!进者一定有分 请问,在panel上怎样贴一张BMP图? 怎样将第三方控件打包? 不能类型的表之间数据转换 如何捕捉dbgrid 中录入数字的错误 请教一下那有INDY的学习资料?可否提供一下下载地址?? 请问
例如 : 我们要将文档中的 " 讨论 " 全部替换成 " 研讨 " 。 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,其他版本路径基本类似。
WordBasic.AcceptAllChangesInDoc你重新看看。