细品RibbonX(27):menu控件详解
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
菜单提供给用户可供从中选取的预定义选项列表,与dropDown控件一样,能够组合图像和文本。
表面上,菜单的用途与下拉控件的用途非常相似。然而,下拉控件的一个主要局限是仅能包含“项目”,而菜单控件可以包含各种各样的其它控件,包括按钮、复选框、库、甚至是另一个菜单。此外,下拉控件的默认显示是一个空框,而菜单可以设置一张“脸”,而不会依赖出现在其列表中的实际项目,因此菜单控件能够给人良好的印象。
1、menu元素必需的属性
菜单控件需要下表1所列的id属性之一。
表1:menu元素必需的属性
属性 | 何时使用 |
id | 当创建自已的菜单时 |
idMso | 当使用现有的Microsoft菜单时 |
idQ | 当在命名空间之间创建共享的菜单时 |
2、带有回调签名的可选的静态属性和动态属性
菜单控件可以使用下表2列出的任一insert属性。
表2:menu元素可选的insert属性
INSERT属性 | 允许值 | 默认值 | 何时使用 |
insertAfterMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之后插入 |
insertBeforeMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之前插入 |
insertAfterQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之后插入 |
insertBeforeQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之前插入 |
也可以为菜单控件设置下表3所列的任何静态属性或等价的动态属性。
表3:menu元素可选的属性和回调
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
description | getDescription | 1至1024个字符 | (none) | Sub GetDescription(control As IRibbonControl, ByRef returnedVal) |
enabled | getEnabled | true,false,1,0 | true | Sub GetEnabled(control As IRibbonControl, ByRef returnedVal) |
image | getImage | 1至1024个字符 | (none) | Sub GetImage(control As IRibbonControl, ByRef returnedVal) |
imageMso | getImage | 1至1024个字符 | (none) | 同上 |
itemSize | (none) | normal,large | normal | (none) |
keytip | getKeytip | 1至3个字符 | (none) | Sub GetKeytip(control As IRibbonControl, ByRef returnedVal) |
label | getLabel | 1至1024个字符 | (none) | Sub GetLabel(control As IRibbonControl, ByRef returnedVal) |
screentip | getScreentip | 1至1024个字符 | (none) | Sub GetScreentip(control As IRibbonControl, ByRef returnedVal) |
showImage | getShowImage | true,false,1,0 | true | Sub GetShowImage(control As IRibbonControl, ByRef returnedVal) |
showLabel | getShowLabel | true,false,1,0 | true | Sub GetShowLabel(control As IRibbonControl, ByRef returnedVal) |
size | getSize | normal,large | normal | Sub GetSize(control As IRibbonControl, ByRef returnedVal) |
supertip | getSupertip | 1至1024个字符 | (none) | Sub GetSupertip(control As IRibbonControl, ByRef returnedVal) |
tag | (none) | 1至1024个字符 | (none) | (none) |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
3、menu元素允许的子对象
menu元素接受下列子对象的任意组合:
n button
n checkbox
n control
n dynamicMenu
n gallery
n menu
n menuSeparator
n splitButton
n toggleButton
4、menu元素的父对象
在下列任何控件内都能放置menu控件:
n box
n buttonGroup
n dynamicMenu
n group
n menu
n officeMenu
n splitButton
5、使用内置的菜单控件
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In menu Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“txtabDemo“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“rxgrpDemo“
label=“Demo“>
<menu idMso=“FilePrepareMenu“
size=“large“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
下图为上述代码创建的组。
6、创建自定义菜单控件
本例中,创建一个菜单,包含一些有用的网站链接,并且将在名为“Ribbon Help”且放置在“开发工具”选项卡末尾的自定义组中包含该菜单。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab idMso=“TabDeveloper“>
<group id=“rxgrpRibbonHelp“
label=“Ribbon Help“>
<menu id=“munResources“
imageMso=“HyperlinkInsert“
size=“large“
label=“Useful Links“>
<menuSeparator id=“rxmSepRibbon“
title=“RibbonX Resources“/>
<button id=“rxbtnMSDN“
label=“MSDN Ribbon DeveloperCentre“
onAction=“rxsharedLinks_click“
tag=“http://msdn2.microsoft.com/en-us/office/aa905530.aspx“/>
<button id=“rxbtnKenPuls“
label=“The Ken Puls blog (ExcelMVP)“
onAction=“rxsharedLinks_click“
tag=“http://www.excelguru.ca/blog/2006/12/01/ribbon-example-table-of-contents“/>
<button id=“rxbtnRondeBruin“
label=“Ron deBruin’s Site (ExcelMVP)“
onAction=“rxsharedLinks_click“
tag=“http://www.rondebruin.nl/ribbon.htm“/>
<button id=“rxbtnAccessFreak“
label=“Access Freak (Access MVP)“
onAction=“rxsharedLinks_click“
tag=“http://www.access-freak.com“/>
<button id=“rxbtnPatrickSchmid“
label=“Patrick Schmid’s RibbonX Forum“
onAction=“rxsharedLinks_click“
tag=“http://pschmid.net/office2007/forums“/>
<menuSeparator id=“rxmSepAuthors“
title=“Authors Sites“/>
<button id=“rxbtnAuthorRobertMartin“
label=“Robert Martin“
onAction=“rxsharedLinks_click“
tag=“http://www.msofficegurus.com“/>
<button id=“rxbtnAuthorKenPuls“
label=“Ken Puls“
onAction=“rxsharedLinks_click“
tag=“http://www.excelguru.ca/“/>
<button id=“rxbtnAuthorTeresaHenning“
label=“Teresa Henning“
onAction=“rxsharedLinks_click“
tag=“http://www.DataDyanmicsNW.com/“/>
<button id=“rxbtnExcelPerfect“
label=“Excel Perfect“
onAction=“rxsharedLinks_click“
tag=“http://www.excelperfect.com/“/>
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
代码创建了一个菜单,列出了九个网站。menuSeparator有效地将这些网站分成了两组。
注意,我们为每个menu控件使用了相同的回调,这使得VBA代码非常简洁。同时,我们将实际的URLs存储在tag属性中。
(3)生成回调签名,并复制代码后关闭CustomUIEditor。
(4)在Excel中打开该工作簿,打开VBE并将回调签名代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。
‘rxbtnMSDN onAction回调
SubrxsharedLinks_click(control As IRibbonControl)
ActiveWorkbook.FollowHyperlinkAddress:=control.Tag, NewWindow:=True
End Sub
代码在新的Web窗口中启动链接。当触发回调时,control对象被传递到过程。该对象具有三个属性:context,id,tag。回调通常查询该控件的ID并相应地作出响应,但在本例中,查询标签,因为标签中存储了URL。接着链接被提供给单击的控件,启动合适的链接。
现在,就可以测试了。切换到Excel界面,单击“开发工具”选项卡,在末尾有一个“Useful Links”的菜单,试着单击其中的菜单项。
下面,再看一个示例。本示例在自定义的菜单中组合一些内置控件以方便使用,其XML代码如下:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtabDemo“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“rxgrpViews“
label=“Document Views“>
<menu id=“rxmnuViewsMenu“
itemSize=“normal“
imageMso=“FilePrintPreview“
label=“Views“
size=“large“>
<toggleButton idMso=“ViewPageBreakPreviewView“/>
<toggleButton idMso=“ViewFullScreenView“/>
<checkBox idMso=“ViewHeadings“/>
<checkBox idMso=“ViewFormulaBar“/>
<checkBox idMso=“GridlinesExcel“/>
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Excel中的自定义界面如下图: