WebBrowser中打开word文档的问题(内祥)(100分)

  • 主题发起人 主题发起人 gboyjuan
  • 开始时间 开始时间
G

gboyjuan

Unregistered / Unconfirmed
GUEST, unregistred user!
我的想法是:
在用WebBrowser打开word文档之前,将这个文档复制到当前目录,然后再打开这个副本
但当我要打开第2个文档时,就不能复制了,因为先复制的那个副本还没关闭。
我在关闭后再打开其它文件时,有时就出问题了:没有显示需要打开的word文档内容,并且把这个程序关闭后,word会出来报错:
您不能关闭Microsoft Word,因为有一个对话框仍处于活动状态。
请先切换到Microsoft Word,关闭该对话框。
在运行程序前已确定所有的word程序都关闭了,并且经常里也没有winword.exe
我是这样写的:
procedure TFrm_Main.LoadTemplet;
var
V_Doc: OleVariant;
begin
if Assigned(WBR_DOC.Document) then
begin
V_Doc:=WBR_DOC.Document;
WBR_DOC.Navigate('');
V_Doc:=NULL;

while WBR_DOC.Document<>Nil do //关闭已打开的word文档
Application.ProcessMessages;
end;

CopyFile( //复制要打开的文件
PChar(ExtractFilePath(Application.ExeName)+'templet/'
+'?.doc'),//?为需要打开的word文档的文件名
PChar(ExtractFilePath(Application.ExeName)+'temp.doc'),
False);
//打开复制后的文件
WBR_DOC.Navigate(ExtractFilePath(Application.ExeName)+'temp.doc');
end;
 
试有好久都没找到好的办法,有许WebBrowser换成OleContainer会好一些,如下:
if CopyFile('C:/123.doc','C:/456.doc',False) then
//好象OleContainer不是直接打开指定的文件,而是在临时目录中打开,因此CopyFile不会出现上面程序的错误
begin
with OleContainer1 do
begin
CreateObjectFromFile('C:/456.doc',False);
DoVerb(ovShow);
OleObject.CommandBars['Standard'].Visible:=False
OleObject.CommandBars['Formatting'].Visible := False;
//将缺省显示的两个工具栏隐藏,但能看到工具栏闪动一下,大缺点:(
end;
end;

看看其他DFW有没有什么高招吧。。。
 
to pihome
看来也只有用这个方法了
再试试,
对了,能够对修改的word文档进行修改并保存和打印吗
 
在WebBrowser中的可能没办法,我试过一些操作,提示"在另外一个程序中,无法操作"之类的提示,在OleContainer中是没问题的,具体的操作如果不清楚的话,你可以打开WORD,工具 -> 宏 -> 录制宏,然后进行你想要的操作,结束后看录下来的宏命令,转换一下就可以在Delphi中直接使用了
比如上面工具栏的操作,WORD中宏命令是
CommandBars("Standard").Visible = False
CommandBars("Formatting").Visible = False
 
to pihome
用OleContainer打开word文档到是没问题了,但编辑后不能保存
它打开的word文档有么办法可以编辑并保存、打印
 
保存没问题了,可是不知怎么能够打印
 
to pihome
我通过其它方法解决问题了,还是用WebBrowser
非常感谢你对这个问题的关注
分送上
 
能说一下是怎么解决的吗?
 
呵呵
说起来可能很好笑
在《delphi6开发人员指南》提供的源码中有个childfrm.pas
通过继承这个form,可以实现将子窗体嵌入到一个容器中,比如说panel
然后我在这个子窗体中放上WebBrowser
当要打开word文档时,就动态创建这个子窗体,同时打开word文档
如果要打开另外的word文档,则先释放这个子窗体(这时word也会跟着关闭),再创建打开
我测试了好多遍,感觉是没问题了
 
后退
顶部