首页 > 单独文章 > 正文

为Office2007用户界面增加自定义按钮

时间:2008-04-21 09:55:27 作者:officeba 【认证】

本文主要为大家介绍下在Office2007中如何通过使用XML和编程代码的方式为Office2007的用户界面添加自定义按钮。

可以使用XML和编程代码的组合,添加自已的自定义按钮到Ribbon中,或者重复使用一些内置按钮。

使用XML添加控件

代码如下:
<?xml version=”1.0″ encoding=”utf-8″ ?>
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui” loadImage=”LoadImage” >
    <ribbon startFromScratch=”false”>
        <tabs>
            <tab id=”tab1″ label=”Button Demo” keytip=”z” >
                <group id=”group1″ label=”Demo Group”>
                    <button id=”button1″
                        enabled=”true”
                        getLabel=”GetLabel”
                        keytip=”A1″
                        getScreentip=”GetScreentip”
                        supertip=”This is a supertip for the button.”
                        getShowLabel=”GetShowLabel”
                        getShowImage=”GetShowImage”
                        getSize=”GetSize”
                        visible=”true”
                        image=”camera.bmp”
                        onAction=”OnAction” />
                    <button id=”button2″
                        getLabel=”GetLabel”
                        getShowLabel=”GetShowLabel”
                        size=”normal”
                        keytip=”A2″
                        imageMso=”TableDrawTable”
                        onAction=”OnAction” />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
本示例通过给选项卡元素的label属性赋文本值,添加了一个标题为Button Demo的自定义选项卡。该选项卡包含Demo Group组,其中含有名为button1和button2的两个自定义按钮,这些按钮通过visible、enabled和size属性来定义其属性。
通过设置属性值为字符串,来给这些属性赋值,例如supertip属性,或者直接指向编程代码过程。下图显示了应用上述XML后Microsoft Office Excel 2007中的结果。

应用上述XML后Microsoft Office Excel 2007中的结果
 
在示例代码中,指定内置组件不同于自定义组件。一些属性有Mso后缀,而一些没有。例如,上面的示例中,id属性没有Mso标识符,对Office应用程序来说,这表示该按钮是一个自定义控件。在imageMso属性中,Mso后缀表明其是一个内置图像。带有Mso后缀的属性代表内置控件、命令和图像。

再来看看按钮的其它属性。首先,设置enabled属性值为True,使得按钮可用;若设置为False,则该控件被为灰色,表明按钮不在活动状态。其次,getLabel属性指向一个回调过程,定义按钮的标签。

keytip属性为按钮赋给一个按键提示。按键提示有时称作为访问键或加速键,并且使用快捷键组合可以激活某控件。要在自定义选项卡控件中使用按键提示,首先为选项卡设置按键提示,或者使用Office赋予的缺省按键提示。然后,为该控件赋予按键提示。例如,在代码中,选项卡有一个按键提示为z,按钮button1有一个按键提示为A1。当Ribbon显示时,按下Alt+z组合键将使得自定义选项卡获取焦点,然后,按下组合键A+1来激活该按钮,并执行在onAction属性中定义的过程,插入文本到工作表中。

在XML中接着为getScreentip属性。屏幕提示(Screentips)是在鼠标指针指向Ribbon中某对象上时显示的小框,用于提供关于所选对象的信息。相似地,supertip属性(如果指向一个回调过程则为getSupertip属性)提供该对象的额外信息。

当某属性带有前缀”get”表明该属性指向一个回调过程。因此在本代码中,getScreentip属性指向名为GetScreentip的回调过程。

注:回调过程不一定使用与其属性相同的名称,可以使用下列代码行getScreentip=”DoSomething”。同时,指向回调过程的属性不一定有前缀get,例如,在XML代码中,onAction属性指向名为“OnAction”的回调。

supertip属性代表了控件属性的另一方面。一个没有get前缀的属性代表可以明确地给其赋文本值。在supertip属性的情形下,直接赋文本值取代了回调过程。也有例外,如onAction属性,该属性没有前缀get。

getShowLabel属性和getShowImage属性都指向涉及到Boolean值的回调过程。例如,设置getShowLabel属性为True导致显示控件时为按钮显示标签。要明确地设置该属性的值,使用showLabel属性。

getSize属性用于指定按钮的尺寸。如果如button2明确地设置size,可选值为normal和large。

再看看上面的XML代码,visible属性设置为一个Boolean值,确定在Ribbon中是否显示按钮。

接下来,button1的image属性用于为按钮指定一个自定义图像。同样地,button2的imageMso属性用于为按钮指定内置图像。

最后,正如前面所提到的,onAction属性指向一个回调过程,当单击该按钮时执行此过程。

对Ribbon组件分配功能

在前面的XML示例中,一些属性指向回调过程。例如,button元素有onAction属性,当单击该按钮时,调用onAction方法或者回调过程。在onAction方法中的代码为按钮提供功能。这些过程被称为回调,因为当单击该按钮时,该操作通知Microsoft Office需要注意该控件。然后,Microsoft Office调用返回通过onAction属性定义的方法,并执行包含在方法中的操作。下面介绍getLabel属性调用的GetLabel回调过程。

Public Function GetLabel(ByVal control As IRibbonControl) As String
    Dim strLabel As String = “”
    Select Case control.ID
        Case “button1″: strLabel = “Insert Text”
        Case “button2″: strLabel = “Insert More Text”
    End Select
    Return strLabel
End Function
当Office2007调用GetLabel过程时,IRibbonControl对象代表被传递的按钮。该过程测试对象的Id属性并依赖其值,赋文本给一个变量。然后,返回该变量到Microsoft Office2007,显示其文本作为按钮的标签。
getScreentip属性也指向一个回调过程。在本例中,该过程返回一个字符串,当鼠标移动到该按钮上时显示该字符串。
Public Function GetScreenTip(ByVal control As IRibbonControl) As String
    Return “Inserts text into the active worksheet.”
End Function
getShowLabel回调过程和getShowImage回调过程对Microsoft Office返回一个Boolean值,指定是否在显示自定义选项卡时显示各自的对象(标签或图像)。
Public Function GetShowLabel(ByVal control As IRibbonControl) As Boolean
    Dim bolShow As Boolean
    Select Case control.ID
        Case “button1″: bolShow = True
        Case “button2″: bolShow = False
    End Select
    Return bolShow
End FunctionPublic Function GetShowImage(ByVal control As IRibbonControl) As Boolean
    Return True
End Function
GetShowLabel过程测试该控件的Id属性,并取决于其值,设置Boolean变量为True或False。然后将该变量返回至Office。
接着,getSize属性指向GetSize回调过程。
Public Function GetSize(ByVal control As IRibbonControl) As RibbonControlSize
    ‘ Selecting one of the two RibbonControlSize enumeration values
    ‘ sets the size of the button.
    Return RibbonControlSize.RibbonControlSizeRegular
    ‘ RibbonControlSize.RibbonControlSizeLarge
End Function
在这个过程中,RibbonControlSize枚举的值被返回到Office。RibbonControlSizeRegular用于为标准尺寸的控件,RibbonControlSizeLarge值用于代表一个大尺寸控件。
最后,当单击该按钮时,调用onAction回调过程。在本例中,该过程测试正调用控件的Id属性,并插入指定的文本到工作表的A1单元格中。
Public Sub OnAction(ByVal control As IRibbonControl)
    Select Case control.ID
        Case “button1″: applicationObject.Range(”A1″).Value = _
            ”This button inserts text.”
        Case “button2″: applicationObject.Range(”A1″).Value = _
            ”This button inserts more text.”
    End Select
End Sub
有两种方式来配置自定义Ribbon:

修改由支持Office Fluent UI的Office应用程序创建的Open XML格式文件。

使用加载项。

使用Open XML文件创建自定义Ribbon并不复杂。

使用Open XML文件创建自定义Ribbon
1、将文档扩展名改变ZIP,并打开。
2、添加包含XML自定义代码的文件夹。
3、修改文档的相关联文件,指向自定义文件夹。
4、重命名文档的文件扩展名,以恢复文档。
5、在Office应用程序中打开该文档。
6、添加代码到文档中,以提供自定义Ribbon功能。

使用加载项自定义Ribbon同样简单。

在创建加载项项目之后,实现IRibbonExtensibility接口,该接口包括在Microsoft.Office.Core命名空间中,包含一个名为GetCustomUI的方法,使用该方法来返回XML Ribbon定制代码到Office。然后,添加编程过程来为自定义Ribbon提供其功能。


相关文章

同类最新