热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->dephi 
站内搜索:
使用Delphi开发Office Word插件(2)
作者:不详 来源:哈巴狗的小窝 整理日期:2007-2-5


注册Office插件

  同其他COM对象一样,一个Office插件必须在系统中注册后才能使用。在Delphi中选择Run | Register ActiveX Server菜单命令,就可以注册们刚才创建的插件。除了标准的COM注册,还需要进行Office 相关的注册,这需要在注册表中创建一个新的键值:

  HKEY_CURRENT_USER\Software\Microsoft\Office\

   <AppName>\Addins\<AddInProgID>

  <AppName>就是插件宿主应用程序的名字(这里是Word),<AddInProgID>是自动化对象的名字(这里是DIWordAddIn.AddIn,ActiveX library和类名的组合)。

  HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Word \ Addins\DIWord AddIn.AddIn

  们还需要在这个键值下创建几个值:一个DWORD类型的名为LoadBehavior的值决定插件是如何加载及被应用程序调用的。在本文中们设定它为3–相当于1和2的结合就是应用程序连接插件并在启动时自动加载。值的意义列在表1.2中,各种值可以相互组合。

表1.2


意  义

$0
  断开,不加载

$1
  连接,加载

$2
  自动启动加载

$8
  只有当用户请求时才加载

$16
  只在下次程序启动时加载一次


  还有一些其他的值可以出现在注册表键值下,比如定义出现在应用程序COM管理器对话框中的名字,以及设定是否可以从命令行激活插件。

Office 2000用户界面

  Office应用程序共享一组通用的用户界面元素对象、菜单条、工具条通用控件(比如工具条按钮和组合编辑框)以及Office小助手。

  此前引入的Word类型库就包括了这些通用对象的类型库,但是Delphi引入时并没有像通常那样建立一个封装好的OLE Server,们不得不手工创建一个Office公开的CommandBarButton对象的Delphi封装。这个对象对应于Office应用程序的一个简单的菜单项或工具条按钮。

  对大多数的Microsoft的应用程序来说,Application对象代表对象模型的切入点。Office Application类提供了对CommandBars属性的引用。CommandBar对象包括工具条、浮动工具条和菜单。Office对象模型允许们创建或更新已有的CommandBars对象。Office_TLB.pas单元包含了ICommandBar接口,它可以被用来修改CommandBar对象。

  CommandBar有一个Controls集合属性,对应于一组CommandBarControl控件。CommandBarControl控件对应于放置在工具条上的控件,比如一个CommandBarButton对应一个简单的工具条按钮(或菜单项),CommandBarCombo控件对应组合编辑框,CommandBarPopup对应于下拉菜单和CommandBarActiveX对应于ActiveX控制。

  在Office_TLB.pas单元中,除了ICommandBarButton接口,还有一个ICommandBarButtonEvents接口用来提供对工具条上控件的事件支持。事件的支持通常是通过连接点、事件接收连接到可连接对象来实现。但这比较麻烦,们还可以通过更简单的办法来实现事件支持。检查一下Delphi在word_tlb.pas单元创建的TWordApplication的实现代码可以发现Delphi封装了每一个可连接对象,自动实现了事件接收机制。这个单元可以作为一个范本用来创建自定义的对接口对象的封装。

  BtnSvr.pas单元包含了一个手工创建的Delphi封装。除了按标准的Delphi属性方式实现了CommandBarButton对象的属性外,还实现了InitServerData、InvokeEvent、Connect、ConnectTo和Disconnect方法。可以注意到这部分完全是模仿TWordApplication实现部分编写的CommandBarButton事件实现。主要就是在InitServerData方法中定义服务器数据。根据Office_TLB.pas中不同的接口GUID,定义一个CommandBarButton接口的内部的接口Fintf,设定InvokeEvent方法来激活基于定义在事件接口部分的DispID的Delphi事件支持。最后,Connect、ConnectTo和Disconnect方法设定Fintf给需要的接口并接收相应的事件。

  定义在BtnSvr.pas单元中的Delphi封装类命名为TButtonServer。它需要从TOleServer对象继承以便支持事件处理。

同应用程序连接

  有了工具条按钮封装类后,接下来要声明一个TWordApplication域来保存对Word Application对象的引用。此外还需要为新的工具条定义一个接口指针以及两个域使用新的TButtonServer类来保存们要创建的新的工具条按钮和菜单项。

  在插件类的private部分添加:

  FWordApp : TWordApplication;

  DICommandBar : CommandBar;

  DIBtn : TButtonServer;

  DIMenu : TButtonServer;

  在OnConnection方法中,保存应用程序指针:

  var

   WA : Word_TLB._Application;

  begin

   FWordApp := TWordApplication.Create(nil);

   WA := Application as Word_TLB._Application;

   WordApp.ConnectTo(WA);

   …………………………..

[1]  [2]  [3]  [4]  
相关文章
暂无