Ole载入Word的问题 急啊 ( 积分: 200 )

  • 主题发起人 主题发起人 14260068
  • 开始时间 开始时间
1

14260068

Unregistered / Unconfirmed
GUEST, unregistred user!
我用OLE载入word,我窗体上出现了word的工具条,
请问,如何屏蔽word工具条啊~~

我只想调用word的 "审阅"功能,改怎么写啊~~~
请高手指点~~
 
我用OLE载入word,我窗体上出现了word的工具条,
请问,如何屏蔽word工具条啊~~

我只想调用word的 "审阅"功能,改怎么写啊~~~
请高手指点~~
 
自己顶一下~
 
这些资料你看看
来自:Huzzz, 时间:2002-8-1 10:53:00, ID:1234969
不知道了:在我这里可以预览,删除也不报错。
OleContainer1.DoVerb(ovShow)
//激活WORD
if OleContainer1.State in [osUIActive] then //隐藏WORD菜单和工具栏
begin
OleContainer1.OleObjectInterface.QueryInterface(IOleInPlaceObject,IOO);
IOO.UIDeactivate;
IOO :=nil;
end;
OleContainer1.OleObject.PrintPreview;//调用WORD的打印预览:必须要激活WORD并隐藏了菜单才能调用
OleContainer1.DoVerb(ovShow);//重新显示WORD菜单和工具栏
OleContainer1.Align := OleContainer1.Align;//这一步是因为DELPHI控件ALIGN的BUG,可以不加
 
谢谢~现在工具条以不显示了
还有一个问题..就是通过点机一个按钮..把 "审阅&quot
功能开启~~
应该也是用OLE调用word的什么接口函数啊~~
 
在顶一下
 
没人回答吗~~~
 
打开word,按下ALT+F11,查吧
 
你就不兴自己在WORD中打开宏录制,然后自己操作一下,试一下看看代码是什么,再自己转换一下??????
 
我通过olecontainer1载入word把word的菜单屏蔽了
问题又出来了
屏蔽菜单后,在olecontainer1里的文档不能编辑了,不屏蔽菜单就好使
但我还想要“审阅”功能
在olecontainer1能执行word宏命令吗~~如果能怎样执行
还有,在delphi里怎样执行宏命令啊~~
 
Word宏和Delphi
来自:yzhshi, 时间:2002-2-2 14:24:00, ID:902680
前面我就Delphi中调用Word写了一些,比较注重于具体实现,对于研究的方法则说的比较片面。
今天晚上,我静下心来,总结了一下怎样在Delphi中生成操作Word的代码。如果说前面我写的是金子,那么下面这篇文章就是点石成金的手指(太自夸了,呵呵)。毕竟已经有半年多没有研究这些了,只能零碎的写一些心得了。
使用CreateOleObject方式调用Word相比Service控件的最大缺点就是不支持代码的自动生成,但是我们充分的利用VBA代码就可以弥补这个功能。
Word作为一个功能强大的Com,可以很容易被编程工具调用,成为办公自动化系统中处理文档的强有力的嵌套工具,尤其是充分Word本身的录制宏的功能,更进一步减轻了编程的负担。
下面就如何在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:=wdReplaceAll
End Sub
2、 精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的VBA帮助来判断代码是否有用。

如上例,精简下来,剩下以下代码。
Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "讨论"
.Replacement.Text = "研讨"
End With
Selection.Find.Execute Replace:=wdReplaceAll
End 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 wdReplaceAll
End Sub

最后补充一下,很多关于Word的东西可以从Word的VBA帮助里面获得。具体文件在
?:/Program files/Microsoft Office/Office10/2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。
 
控制Word菜单,用ole嵌入word,然后用VBA来控制菜单项。
 
嘿,其实于我来说,拿多少分无所谓的,发分就好,但做人厚道些更好哦,有了结果拿出来分享就更好了
 
后退
顶部