本人在用delphi对word文档进行编程中,遇到个问题,就是希望将word打开后包含到delphi创建的窗体中,从而对其进行操作。
我已经试过一些方法也查过很多资料,正如一片文章<<Delphi与Word之间的融合技术>>所说:
a.通过Delphi的控件TOleContainer 将Word嵌入
这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的。b.使用Delphi提供的Servers控件调用Word,使用Word的属性
使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Word的控制,但是还有一些Word的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。且实现功能时本来在VBA代码中可选则参数在Delphi调用的时候必须添加,否则,连编译都不能通过。  !!本方式启动的Word与Delphi程序分属两个窗体。!!  此办法仅能作为一个参考。c.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。d.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。
本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。 !!本方式启动的Word与Delphi程序分属两个窗体!!  缺点是使用本方法没有Delphi代码提示,所有异常处理均需要自己编写,可能编写时探索性知识比较多。不知用什么办法能够实现,像通过Delphi的控件TOleContainer 将Word嵌入到窗体,又可以通过delphi对嵌入到窗体中的word文档进行操作。
请高手大虾们指点,谢谢,祝大家中秋愉快,身体健康:)

解决方案 »

  1.   

    用TOleContainer将Word嵌入到窗体就可以,TOleContainer也可以象Ole一样控制Word,
    只是没那么直接罢了,比如下面的函数可以获取TOleContainer内Word文档的总页数:function  TfmEditWord.GetDocumentPageCount:Integer;
    var
      app, sel, page : Variant;
    begin
      Result:=-1;
      try
        app:=TOleContainer1.OleObject.Application;
        sel:=app.Selection;
        page:=sel.Information[wdNumberOfPagesInDocument];
        Result:=StrToIntDef(VarToStr(page),-1);
      except
        ;
      end;
    end;
      

  2.   

    如果是为了让用户阅读,那导入到程序中或是调用WORD都没问题,但如果要编辑,最好还是让用户直接用WORD,就是采用SHELL调 WORD,因为你总不能自己去写让些文本编辑的控件,比如艺术字之类
    shellexecute 这个函数驱动本地就可以了
      

  3.   

    感谢myy() 和 steelxu5的回答。
    使用TOleContainer控件,delphi不能直接操作创建word文档,向里面添加内容,我的目的是使用Servers控件页中的word相关控件来直接操纵创建的Word文档。