细品RibbonX(26):库(Gallery)控件详解
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
下面介绍如何使用库,Office 2007用户界面中最酷的新功能之一。
库被设计作为图形化显示用户选项的一种方式,例如样式库,能够通过查看该样式图形化的呈现使用户选择一种样式。可以使用库来组织照片、访问样式、或者存储调色板。在需要并提供可视效果的定制中,库是完美的控件。
此外,在库的底部也可以添加按钮。
库的XML标记如下:
<gallery>
<!—放置XML代码>
</gallery>
库由静态的、动态的和可选的子属性组成,需要下表1所示的静态属性。
表1:库的静态属性
静态属性 | 允许值 | VBA回调签名 |
columns | 1至1024 | N/A |
itemHeight | 1至4096 | Sub getItemHeight(control As IRibbonControl, ByRef height) |
itemWidth | 1至4096 | Sub getItemWidth(control As IRibbonControl, ByRef width) |
rows | 1至1024 | N/A |
sizeString | 1至1024个字符 | N/A |
showItemImage | true,false,1,0 | N/A |
showItemLabel | true,false,1,0 | N/A |
库也可以包含下表2所示的动态属性。
表2:库的动态属性
动态属性 | 允许值 | VBA回调签名 |
getItemCount | 0至1000 | Sub GetItemCount(control As IRibbonControl, ByRef count) |
getItemID |
| Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id) |
getItemImage |
| Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image) |
getItemLabel | 1024 | Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label) |
getItemScreentip | 1024 | Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef screentip) |
getItemSupertip | 1024 | Sub GetItemSuperTip(control As IRibbonControl, index As Integer, ByRef supertip) |
getSelectedItemID | 1至1024个字符 | Sub GetSelectedItemID(control As IRibbonControl, ByRef index) |
getSelectedItemIndex | 1至1024 | Sub GetSelectedItemIndex(control As IRibbonControl, ByRef index) |
onAction |
| Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer) |
库还能够接受下表3所列的一个或全部对象作为其子元素,也可以具有每个对象的多个实例。
对象 | 作用 |
button | 在库中添加一个可单击的按钮 |
item | 在库中添加一个项目。该项目可以图形化地呈现希望执行的操作,例如图表布局的图形化呈现 |
下面,介绍一个示例,创建下图所示的库。
(1)创建一个新的Excel工作簿,保存后关闭。
(2)在CustomUI Editor中打开该文件,输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab
id=“rxtab“
insertBeforeMso=“TabHome“
label=“My CustomTab“>
<group
id=“rxgrp“
label=“My PhotoGallery“>
<!– Starts the definition of our gallery–>
<gallery
id=“rxgal“
label=“My PhotoGallery“
image=“img4“
columns=“2“
rows=“2“
itemWidth=“200“
itemHeight=“150“
showItemLabel=“false“
size=“large“>
<!– Insert the photo gallery–>
<!– Import the photos you want to use first–>
<item id=“rxitem0“label=“London 1“image=“img0“/>
<item id=“rxitem1“label=“London 2“image=“img1“ />
<item id=“rxitem2“label=“London 3“image=“img2“ />
<item id=“rxitem3“label=“London 4“image=“img3“ />
<item id=“rxitem4“label=“London 5“image=“img4“ />
<item id=“rxitem5“label=“London 6“image=“img5“ />
<!– Insert a button at the end of the gallery–>
<button id=“rxbtn“
imageMso=“RefreshStatus“
label=“Visit excelperfect…“
onAction=“rxbtn_Click“/>
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
(3)在CustomUI Editor中装载名为img0至img5的图像。
(4)保存并关闭CustomUI Editor,然后重新打开该工作簿,即可看到上图所示的自定义库。
使用内置库控件
有时,可能想将开始、插入、页面布局选项卡中的库放置在自定义选项卡中以方便使用,而无须在选项卡之间来回移动。下面的例子将三个内置库控件集中放置在一个自定义选项卡中。XML代码为:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtab“
insertBeforeMso=“TabHome“
label=“GalleriesTab“>
<group
id=“rxgrp“
label=“Gallery Group“>
<box id=“rxbox1“boxStyle=“horizontal“>
<gallery idMso=“FontColorPicker“label=“AAA“/>
<labelControl id=“rxlbl1“label=“Font Color“/>
</box>
<box id=“rxbox2“boxStyle=“horizontal“>
<gallery idMso=“CellFillColorPicker“ />
<labelControl id=“rxlbl2“label=“Cell Color“/>
</box>
<box id=“rxbox3“boxStyle=“horizontal“>
<gallery idMso=“ChartTypeColumnInsertGallery“size=“normal“ />
</box>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
结果如下图所示。
在运行时创建图像库
如果使用XML代码装载图像的话,那么随着库中图像数量的增加,需要输入更多的XML代码。显然,这不仅浪费时间,而且使维护变得更复杂。
下面的示例演示如何在库中动态添加图像,以避免额外的输入。在代码中:
n getImage:用于装载库控件的图片(不是真正的库里面的图片)。
n getItemCount:用于返回库中的项目数。在VBA代码中使用常量来决定这个值,这样如果需要更多的图片项目,只需简单地修改其数值。
n getItemImage:用于装载项目图像,也就是说,每一个显现在库中的图像。
注意,不会遍历每一项,相反,Ribbon将回调getItemImage属性直至遍历由getItemCount属性决定的所有项目。此时,返回代表每个项目的图像的索引值。接下来,使用这个索引来捕获并装载相应的图片。
定制Excel界面库控件的XML代码如下:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtab“
insertBeforeMso=“TabHome“
label=“My Custom Tab“>
<group id=“rxgrp“
label=“My Photo Gallery“>
<!– Starts the definition of our gallery –>
<gallery id=“rxgal“
label=“My Photo Gallery“
columns=“2“
rows=“2“
itemWidth=“200“
itemHeight=“150“
getImage=“rxgal_getImage“
getItemCount=“rxgal_getItemCount“
getItemImage=“rxgal_getItemImage“
onAction=“rxgal_Click“
showItemLabel=“false“
size=“large“>
<!– Inserts a button at the bottom of the gallery –>
<button id=“rxbtn“
imageMso=“RefreshStatus“
label=“Visit excelperfect …“
onAction=“rxbtn_Click“/>
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
在Excel VBE中的代码如下:
Public Const gcItemCount =6
‘rxgal getImage回调
Sub rxgal_getImage(controlAs IRibbonControl, ByRef returnedVal)
Set returnedVal =LoadPicture(ActiveWorkbook.Path & “\MUN.bmp”)
End Sub
‘rxgal getItemCount回调
Subrxgal_getItemCount(control As IRibbonControl, ByRef returnedVal)
returnedVal = gcItemCount
End Sub
‘rxgal getItemImage回调
Sub rxgal_getItemImage(controlAs IRibbonControl, index As Integer, ByRef returnedVal)
Set returnedVal =LoadPicture(ActiveWorkbook.Path & “\img” & index & “.bmp”)
End Sub
‘rxgal onAction回调
Sub rxgal_Click(control AsIRibbonControl, id As String, index As Integer)
MsgBox “您单击的图像索引号为 ” & index
End Sub
‘rxbtn onAction回调
Sub rxbtn_Click(control AsIRibbonControl)
MsgBox “更多技术请访问:http://www.excelperfect.com”
End Sub
当然,如果BMP格式效果不好,可以使用上篇文章中介绍的LoadImage函数装载PNG格式。