Ribbon界面的Office插件开发

article/2025/9/20 8:05:21

      此乃开博第一篇也。Office插件开发是一项古老的技术,似乎从office2000开始,Office的插件体系就已经固定下来,后续版本也只是在不断完善和加入新功能。Office插件是在COM模型的基础上,实现了特定的接口,进而通过COM技术进行相互操作的一个dll文件。通过在相应的注册表位置进行注册,就可以被Office程序调用。

在继续本篇教程之前,先来介绍一下本次开发的基本环境:

开发工具:Delphi 7 企业版

系统环境:Win7 64位系统 安装WPS Office 2013SP3(9.1.0.4953)

      基于WPS V9版的API,这个版本基本兼容 MS Office 2007,你也可以基于MS OfficeAPI接口,效果是一样的。本教程同时可用于MS Office 和 WPS Office

Office插件是一个实现了IDTExtensibility2接口的COM组件,在导入相应的类型库后就可以引用AddInDesignerObjects_TLB.pas的相关接口,它的声明如下:

  _IDTExtensibility2 = interface(IDispatch)['{B65AD801-ABAF-11D0-BB8B-00A0C90F2744}']procedure OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode; const AddInInst: IDispatch; var custom: PSafeArray); safecall;procedure OnDisconnection(RemoveMode: ext_DisconnectMode; var custom: PSafeArray); safecall;procedure OnAddInsUpdate(var custom: PSafeArray); safecall;procedure OnStartupComplete(var custom: PSafeArray); safecall;procedure OnBeginShutdown(var custom: PSafeArray); safecall;end;

 

在此不多做介绍,具体可参考MSDN,里面有详细的介绍。

Ribbon界面是Office2007新增的界面,这个界面的插件开发,将界面设计与功能实现进行了分离,界面以XML文件进行定义,功能实现以回调函数的形式调用,与传统的工具栏和菜单形式的插件相比,开发效率要高的多,本教程要介绍的就是这一技术。

在实现Ribbon界面,在插件中除了要实现IDTExtensibility2接口外,还要实现Ribbon界面的专用接口IRibbonExtensibility,这个接口定义在Office的类型库中,声明如下:

 

  IRibbonExtensibility = interface(IDispatch)['{000C0396-0000-0000-C000-000000000046}']function GetCustomUI(const RibbonID: WideString): WideString; safecall;end;

 

这个接口只有一个方法GetCustomUI,返回值为界面设计的XML文件内容。我们本次要实现的界面XML内容如下:

 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"><ribbon startFromScratch="false"><tabs><tab id="DemoTab" label="育林软件"><group id="loadFormsGroup" label="测试分组"><button id="btn1" label="测试功能" onAction="OnAction" getImage="GetImage"/><button id="btn2" label="关于我们" onAction="OnAction" getImage="GetImage"/></group></tab></tabs></ribbon>
</customUI>

 

关于XML的定义规则请参考MSDN,上面有详细介绍。OnAction是回调函数,用于响应按钮点击,GetImage用于返回按钮的图片。

我们的COM对象定义如下:

 

typeTTestRibbon = class(TAutoObject, IDTExtensibility2, IRibbonExtensibility, ITestRibbon)privateprotected{实现IRibbonExtensibility接口}function GetCustomUI(const RibbonID: WideString): WideString; safecall;{实现IDTExtensibility2接口}procedure OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode;const AddInInst: IDispatch; var custom: PSafeArray); safecall;procedure OnDisconnection(RemoveMode: ext_DisconnectMode; var custom: PSafeArray); safecall;procedure OnAddInsUpdate(var custom: PSafeArray); safecall;procedure OnStartupComplete(var custom: PSafeArray); safecall;procedure OnBeginShutdown(var custom: PSafeArray); safecall;{实现ITestRibbon接口,这两个方法就是我们要用的回调函数}procedure OnAction(const ctrl: IDispatch); safecall;function GetImage(const ctrl: IDispatch): IDispatch; safecall;publicend;

 

ITestRibbon是我们com对象定义的接口,它有两个方法OnActionGetImage,如果XML中定义的控件较多,我们需要添加的回调函数就越多,每种控件的回调函数都是大同小异,我们实现的就是针对普通按钮的回调函数,需要在delphi的类型库编辑器中添加,如下图。

 

     OnAction你也可以定义为其它名称,只要参数类型相同,什么名字都可以,但要注意名称一定要跟XML中定义的一样,也就是说你这里定义的什么名字,XML文件中onActon后面也要用什么名字。类型库导入完成,接口定义完成就开始实现部分了,这才是重点。说实话,在接口定义部分我也走了不少弯路,研究了几个晚上才搞明白,网上基于.net的相关内容不少,但参考性不强,.netcom的实现进行了封装,开发者不用关心定义,只要写代码就可以了,但delphi要做的工作还有很多。虽然麻烦,但好处还是有的,.net开发的插件要附带很多文件,delphi开发的插件只要发布一个dll就可以了。

下面我们来看实现部分,先看GetCustomUI

 

function TTestRibbon.GetCustomUI(const RibbonID: WideString): WideString;
var Str:TStrings;
beginStr:=TStringList.Create;Str.LoadFromFile('C:\CustomUI.xml');Result := Str.Text;Str.Free;
end;

     这里我们选择从文件载入XML数据,主要是为了后期修改与调试方便,等到发布的时候,完全可以将XML文件加入进资源文件,从资源中载入。

到这里,如果我们编译后安装插件,就可以在Office中显示我们的按钮了,但由于没有实现OnAction,所以点击按钮是没有任何反应的,下面我们来实现OnAction回调函数。它的定义如下:

procedure OnAction(const ctrl: IDispatch); safecall;

根据微软的定义,ctrl是一个IRibbonControl接口的参数,这个接口定义在Office的通用类型库中,这个参数是我们判断到底是哪个按钮调用了这个函数的基础,就是依据IRibbonControlID属性,这个ID就是XML中定义的Id,我们的实现如下:

 

procedure TTestRibbon.OnAction(const ctrl: IDispatch);
beginif (ctrl as IRibbonControl).Id = 'btn1' thenMessageBox(0, '您点击了按“测试功能”!', '提示', MB_OK + MB_ICONINFORMATION)elseMessageBox(0, '您点击了按钮“关于我们”!', '提示', MB_OK + MB_ICONINFORMATION);
end;

到此一个简单的插件就已经完成了,下面说一下插件安装。

将以下内容保存为注册表文件.reg,并双击导入注册表。

 

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\Yulinsoft.TestRibbon]
"FriendlyName"="测试Ribbon插件"
"Description"="测试插件"
"LoadBehavior"=dword:00000003
"CommandLineSafe"=dword:00000001[HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\AddinsWL]
"Yulinsoft.TestRibbon"=""

 

然后再用命令行regsvr32注册我们的dll,注意文件路径正确,注册成功后打开Word2007WPS,就可以看到我们的按钮了,如下图:

【原创文章,转载请注明出处】 

本教程全部代码与资源文件下载:

http://pan.baidu.com/s/1eQrSOSE

本文参考内容如下:

http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)

Customizing the 2007 Office Fluent Ribbon for Developers (Part 2 of 3)

Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)

初来贵地交流技术,如有不对之处,欢迎大家批评指证。下节我们将讲解如何给按钮添加图像!

 

转载于:https://www.cnblogs.com/yulinsoft/p/4603912.html


http://chatgpt.dhexx.cn/article/xCSBG8n0.shtml

相关文章

robbin界面 java_使用JAVA和C#开发Ribbon界面

Ribbon 原来出现在 Microsoft Office 2007 的 Word、Excel 和 Powerpoint 組件中&#xff0c;后来也被运用到 Windows 7 的一些附加组件等其它软件中&#xff0c;如画图和写字板。它是一个收藏了命令按钮和图标的面板。它把命令组织成一组"标签"&#xff0c;每一组包…

基于WinForm开发的Ribbon界面案例的扩展

增加 Ribbon 三联排小按钮 文本菜单的动态添加删除及提示 ribbon按钮的动态添加删除 checkbox按钮下拉按钮样式 public partial class Form1 : Form { public Form1() { InitializeComponent(); UIApplication uiapp new UIApplication(this.aeRibbonControl1); uiapp.Creat…

Ribbon 界面介绍(1)

Ribbon 界面介绍&#xff08;1&#xff09; 转自&#xff1a;http://www.cnblogs.com/madhenry/archive/2011/12/02/Ribbons.html 小弟最近在学习VS2010中Ribbon界面的介绍&#xff0c;相比与C#的界面设计的强大&#xff0c;C的界面实在太难做了&#xff0c;但没办法&#xff…

Ribbon界面制作

Ribbon是类似于office2007样式的界面,它替代了传统的MFC程序里的菜单和工具栏 MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面好看 看下面的一个界面,是VC2010示例里的 看到它与默认Ribbon样式的区别: 工具自己设计,MFC提供的Ribbon控件基本都…

Winform上实现Ribbon界面的雏形

winform里使用 再也无需采用第三方Ribbon库 自定义实现 效果不错 以后留着再升级完成 可以一起探讨探讨

[转]Ribbon界面介绍(1)

小弟最近在学习VS2010中Ribbon界面的介绍&#xff0c;相比与C#的界面设计的强大&#xff0c;C的界面实在太难做了&#xff0c;但没办法&#xff0c;项目需求&#xff0c;又不得不做&#xff0c;遍查网络上的资料&#xff0c;发现有用的基本上就是MSDN的帮助&#xff0c;又是全英…

C#中使用ribbon界面

&#xfeff;&#xfeff; 自Office2007开始&#xff0c;软件都逐渐地采用了Ribbon界面&#xff0c;一方面是时尚&#xff0c;如同许多厂商声称的那样&#xff0c;是 state of arts&#xff0c;另外&#xff0c;通过调查表明&#xff0c;Ribbon界面比传统的下拉栏菜单方式的工作…

MFC Ribbon界面设计

Ribbon是类似于office2007样式的界面&#xff0c;它替代了传统的MFC程序里的菜单和工具栏 MFC默认生成的Ribbon功能少&#xff0c;需要我们自己添加一些控件和图片等元素使界面好看 看下面的一个界面&#xff0c;是VC2010示例里的 看到它与默认Ribbon样式的区别&#xff1a; 工…

二次开发—Ribbon界面

二次开发—Ribbon界面 界面类型与设置 Ribbon界面与经典工具条的设置在(文件->实用工具-)用户默认设置)&#xff0c; 还有一个常用的(菜单->首选项)。 相关文(startup文件夹中) 1..rtb文件&#xff0c; Ribbon文件主要文件&#xff0c;group其他的文件&#xff0c;一…

基于WinForm开发的Ribbon界面案例

使用 Winform开发插件或软件时&#xff0c;创建Ribbon界面是比较难的&#xff0c;大部分第三方Ribbon控件不是针对WPF开发的 就是不能免费授权&#xff0c;以下的AERibbonControl库 是自定义开发的 可以免费使用 可以满足大部分的需要&#xff0c;后续将持续扩展 添加更多灵活的…

MFC:Ribbon界面设计

本节教程初步讲讲怎样为Ribbon Bar添加Ribbon控件。 VS2010为Ribbon界面开发提供了Ribbon Designer&#xff0c;通过它我们可以为Ribbon Bar添加各种Ribbon控件、设置控件属性和进行界面布局。 Ribbon的界面元素可以分为类别、面板和基本控件&#xff08;按钮、文本编辑框等&am…

C#之CAD二次开发: Ribbon界面初探

# 0. 引言 从CAD2009版本以后就开始使用上了Ribbon界面&#xff0c;更早的版本使用的界面相对较为简单&#xff0c;对比一下就知道啥是Ribbon界面了 这是CAD2006界面&#xff0c;经典的菜单工具栏&#xff0c;略low 这是CAD2018的Ribbon界面 Ofiice从07版本开始采用Ribbon界面…

基于Ribbon界面的MFC应用程序

1.打开vs2013&#xff0c;选择菜单项文件–新建–项目 2.在弹出的新建项目对话框中选择模板–Visual C-MFC&#xff0c;然后在中间选择MFC应用程序&#xff0c;最下方名称随便起&#xff0c;这里我设为RibbonExample&#xff0c;位置放在自己想要放的位置就好 3.点击确定&a…

【MFC】Ribbon界面开发(三)

01.目录 目录 01.目录02.本文内容03.完善Ribbon实例3.1 为Ribbon bar 添加更多的Ribbon控件3.2 为Ribbon控件添加消息处理函数 04.扩展内容&#xff08;快速访问工具栏&#xff09;05.总结 02.本文内容 上一节中讲了为Ribbon Bar添加控件的方法。本节将继续完善前面的实例&…

MFC入门之 Ribbon界面设计

Ribbon是类似于office2007样 式的界面&#xff0c;它替代了传统的MFC程序里的菜单和工具栏MFC默认生成的Ribbon功能少&#xff0c;需要我们自己添加一些控件和图片等元素使界面好看。看下面的一个界面&#xff0c;是示例里的 看到它与默认Ribbon样式的区别&#xff1a; 工具自己…

DevExpress 设计Ribbon界面

Ribbon上包含以下一些元素&#xff0c;如图所示&#xff1a; 元素对应API&#xff1a; Element Ribbon API Quick Access ToolbarRibbonControl.Toolbar RibbonQuickAccessToolbar.ItemLinksApplication ButtonRibbonControl.ShowApplicationButton RibbonControl.Application…

Ribbon界面1

收费工具&#xff0c;一百大洋。学生党勿扰。 1 概述 应客户要求&#xff0c;写了一个Ribbon风格的界面。 2 截图

Ribbon界面2

1 概述 Qt实现的Ribbon界面。 2 截图 office2003风格 office2003风格 office2005风格 office2005风格 office2013风格

Ribbon界面开发(C++)

一.简介 Ribbon:固定式工具栏界面,能够使用户更容易地使用 软件的各项常用功能&#xff0c;例如Word 2007中的保存&#xff0c;设置格式&#xff0c;插入图片等常用功能&#xff0c;都可以从Ribbon界面快速地访问到&#xff0c;从而提高用户的生产效率 二.项目创建 1&#x…

Ribbon界面介绍

http://hi.baidu.com/hoping/item/b257e10e99ed7312cd34ea1d Ribbons Ribbon是现代化的方式帮助用户高效和直接的查找、理解和使用工具命令——通过最少的点击&#xff0c;减少从“尝试-错误”&#xff08;trainl-and-error&#xff09;方式中恢复操作&#xff0c;寻找新的操作…