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


  在OnStartupComplete方法中,添加下面的代码来获得工具菜单的接口指针,查找自定义的的菜单项,如果没有就创建新的,然后设定它的OnClick事件:

  ToolsBar := WordApp.CommandBars[Tools];

  MenuIntf := ToolsBar.FindControl(EmptyParam, EmptyParam,

   DIMenu, EmptyParam, EmptyParam);

  if (not Assigned(MenuIntf)) then

   MenuIntf := ToolsBar.Controls.Add(msoControlButton,

   EmptyParam, EmptyParam, EmptyParam, EmptyParam);

   DIMenu := TButtonServer.Create(nil);

   DIMenu.ConnectTo(MenuIntf as _CommandBarButton);

   DIMenu.Caption := Delp&hi Menu;

   DIMenu.ShortcutText := ;



图1.34

   DIMenu.Tag := DIMenu;

   DIMenu.Visible := True;

   DIMenu.OnClick := MenuClick;

  CommandBar接口的FindControl方法使用唯一的标识来查找菜单项,如果找到了控件就赋值给 MenuIntf,如果没有找到就创建一个新的菜单项。图1.34显示了自定义的工具条。

清理资源

  注意应该在OnBeginShutdown 方法中清理用户界面元素:

   if (Assigned(DIBtn)) then

   begin

    DIBtn.Free;

    DIBtn := nil;

   end;

   if (Assigned(DIMenu)) then

   begin

    DIMenu.Free;

    DIMenu := nil;

   end;

   if (Assigned(DICommandBar)) then begin

    DICommandBar.Delete;

    DICommandBar := nil;

   end;

  因为插件的框架是通用的,们可以将同样的OLE Server DLL用于多个应用程序,方法就是确定将激活插件的应用程序,并使用合适的对象模型。最简单的判断方法是在OnConnection中把应用程序的IDispatch的接口指针赋值给一个OleVariant变量,然后使用相应的Name 属性来确定相应的程序:

  var

   AppVar : OleVariant;

  begin

   AppVar := Application;

   if (AppVar.Name = Outlook) then

   begin

    ...

   end

   else if (AppVar.Name = Microsoft Word) then

   begin

    ...

   end else ...

  最后,要想获得关于Office开发和Office 2000插件创建更详细的资料,可以查阅microsoft.public.officedev新闻组上的信息。
[1]  [2]  [3]  [4]  
相关文章
暂无