我的程序,有一个TOleContaner控件,一个按钮,按钮点击就这么两句.
procedure TForm1.Button1Click(Sender: TObject);
var
  OleObj:OleVariant;
begin
  self.OleContainer1.CreateObjectFromFile('f:/1.doc',false);
  self.OleContainer1.DoVerb(ovShow);
  OleObj:=self.OleContainer1.OleObject.Application;
end;
打开后挺正常,但工具栏里的新建/打开/保存/打印预览都为灰色,另外菜单栏是怎么也不出来.我查了一天发现,所有相关的问题都是代码根我写的一样,然后问怎么把工具栏/菜单栏隐藏,我这md反了,怎么回事呀,那位给解释一下,是不是版本问题,我的delphi是7.0.

解决方案 »

  1.   

    请问各位高手,小弟用ole容器调用word时,word加入菜单后,却没有“文件”这一个菜单,我只需要文件中的页面设置和打印预览这两个菜单,请问如何增加,谢谢赐教!  
    什么加"word加入菜单"?
    就是word将原有的菜单与他本身的菜单合并起来,但是就是缺少“文件”这个子菜单
    1.这是 Delphi VCL 底层控件 TOleForm 的限制,如果你确实需要“文件”菜单只能自己手动在 OleContainer 所在的 Form 中添加 TMainMenu并且设置相关MenuItem, OleContainer中的Word 激活后自然Menu会融合在一起。具体融合情况与MenuItem 的GroupIndex 有关,可参照 Delphi 的 Help.
    2.Pizza 的话很对,OleContainer 只鼓励编辑文档,而不愿提供保存,打印等支持。我们只能在自己手动添加的MenuItem相应的OnClick处理函数自己完成这些工作。这就要复杂多了,要调用Word的Automation方法来完成。答案是可以完成的,但速度实在是个问题。关于Word的Automation 方法可查阅 Word 的 VBA Help.
      

  2.   

    MenuItem怎么设置亚?是不是Word中的文件菜单是什么名,就建一个MenuItem设为这个名字吧?
      

  3.   

    Delphi的菜单融合与菜单项的GroupIndex有关,一般来说,对于GroupIndex相同的菜单Delphi会自动融合,如果对应的GroupIndex不存在,就自动增加一个菜单项,位置由GroupIndex的大小来定。MenutItem不要怎么设置,而是要写相应的调用代码去调用Word提供的自动化接口。对于文件菜单对应的接口,你可以通过Word内面宏和VBA结合来查找,找到后在程序中调用就可以了。
      

  4.   

    你也可以调用OleContainer1.SaveAsDocument()来自己保存文档
      

  5.   

    OleContainer1控制word很麻烦,大富翁上有一2001年的贴子讨论至现在未果。
    要出菜单倒简单,在窗口加一个菜单控件即可。
    要想新建/打开/保存/打印预览按钮可用则很难。即算用接口调用VBA的相应函数也很难实现。可在自定义菜单中实现新建/打开/保存,但要实现打印预览好象没有办法。
    这也许是word中很多技术未公布,基本上用OleContainer1控制word实现商业化开发是一条死路。
      

  6.   

    建议不要使用OleContainer控件,我几年前使用过一次以后就再也没有使用,还是自己调用WORD自动化来完成,可以实现WORD的几乎所有功能。