20.4.4 RibbonX控件回调函数实例(1)
前面介绍的实例都没有使用RibbonX控件的回调函数。在实际应用中,很多地方都需要使用回调函数才能完成具体的工作。下面以实例演示回调函数的使用方法,创建类似Excel 2007功能区【开始】选项卡的【剪贴板】组中的【粘贴】分离按钮控件,当用户单击下方的按钮时将弹出下拉按钮列表,如图20-29左图所示。单击其中某个按钮后,上方显示的按钮将变为该按钮图标。鼠标指向按钮时,下方将显示提示信息,如图20-29右图所示。
|
(点击查看大图)图20-29 新建RibbonX控件 |
具体的步骤如下:
(1)向Excel工作簿中添加以下自定义RibbonX控件的XML代码:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="rxcustomUI_onLoad"> <ribbon> <tabs> <tab id="rxGoto" label="跳转" > <group id="rxMoveCell" label="单元格移动" > <splitButton id="rxSplit" size="large" > <button id="rxButton" getImage="rxButton_getImage" getLabel="rxButton_getLabel" getSupertip="rxButton_getSupertip" onAction="rxButton_ onAction" /> <menu id="rxMenu" > <button id="rxMenuTop" label="顶部" imageMso="FillUp" onAction="rxMenu_onAction" /> <button id="rxMenuLeft" label="左侧" imageMso="FillLeft" onAction="rxMenu_onAction" /> <button id="rxMenuRight" label="右侧" imageMso="FillRight" onAction="rxMenu_onAction" /> <button id="rxMenuBottom" label="底部" imageMso="FillDown" onAction="rxMenu_onAction" /> </menu> </splitButton> </group> </tab> </tabs> </ribbon> </customUI>
|
以上代码中,第1行语句中添加了onLoad属性,该属性设置系统装载自定义RibbonX时执行的回调函数名称,需要在VBE中编写名为rxcustomUI_onLoad的过程,具体代码如下:
<splitButton>元素中包含1个按钮(<button>控件)和1个菜单(<menu>控件),在<menu>控件中添加4个按钮控件。<splitButton>元素中包含的按钮用来显示上一步操作过的按钮图标,在下拉菜单中选择不同按钮后,该按钮将自动更新其图标、提示文字和标签文字,因此,使用了getImage、getLabel、getSupertip 3个属性分别设置3个回调函数,具体代码如下:
<button id="rxButton" getImage="rxButton_getImage" getLabel="rxButton_getLabel" getSupertip="rxButton_getSupertip" onAction="rxButton_onAction" />
|
而<menu>控件包含的4个按钮控件只需要使用onAction属性设置一个回调函数即可。
(2)将上述XML代码添加到Excel工作簿中后,在Excel 2007中打开该工作簿即可看到自定义的RibbonX控件,如图20-29所示。
(3)按组合键Alt+F11进入VBE环境。
(4)向工程中插入一个模块,在模块声明部分输入以下代码声明2个模块变量:
Dim moRibbon As IribbonUI '模块变量,获取对Ribbon的引用 Dim str1 As String '模块变量,保存当前按钮的状态
|
(5)当Excel 2007装载自定义RibbonX时,将调用onLoad属性设置的回调函数。在程序中只能通过该回调函数获取RibbonX对象的引用。具体代码如下:
Sub rxcustomUI_onLoad(ribbon As IRibbonUI) Set moRibbon = ribbon '获取对Ribbon的引用 End Sub
|
(6)编写getImage属性设置的回调函数如下:
Sub rxButton_getImage(Control As IRibbonControl, ByRef returnedVal) If str1 = "" Then str1 = "Right" Select Case str1 Case "Top" returnedVal = "FillUp" Case "Left" returnedVal = "FillLeft" Case "Right" returnedVal = "FillRight" Case "Bottom" returnedVal = "FillDown" End Select End Sub
|
回调函数的参数可参见本章20.2.4节中的介绍。以上代码通过模块变量str1,判断当前使用过的按钮,再使用参数returnedVal返回对应按钮的图像ID(使用内置图像)。
|