滚石香港黄金十年全集:细品RibbonX(26):库(Gallery)控件详解
来源:百度文库 编辑:偶看新闻 时间:2024/10/02 17:11:01
下面介绍如何使用库,Office 2007用户界面中最酷的新功能之一。
库被设计作为图形化显示用户选项的一种方式,例如样式库,能够通过查看该样式图形化的呈现使用户选择一种样式。可以使用库来组织照片、访问样式、或者存储调色板。在需要并提供可视效果的定制中,库是完美的控件。
此外,在库的底部也可以添加按钮。
库的XML标记如下:
库由静态的、动态的和可选的子属性组成,需要下表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代码:
id=“rxtab“
insertBeforeMso=“TabHome“
label=“My Custom Tab“>
id=“rxgrp“
label=“My Photo Gallery“>
id=“rxgal“
label=“My Photo Gallery“
image=“img4“
columns=“2“
rows=“2“
itemWidth=“200“
itemHeight=“150“
showItemLabel=“false“
size=“large“>
(3)在CustomUI Editor中装载名为img0至img5的图像。
(4)保存并关闭CustomUI Editor,然后重新打开该工作簿,即可看到上图所示的自定义库。
使用内置库控件
有时,可能想将开始、插入、页面布局选项卡中的库放置在自定义选项卡中以方便使用,而无须在选项卡之间来回移动。下面的例子将三个内置库控件集中放置在一个自定义选项卡中。XML代码为:
insertBeforeMso=“TabHome“
label=“Galleries Tab“>
id=“rxgrp“
label=“Gallery Group“>
结果如下图所示。
在运行时创建图像库
如果使用XML代码装载图像的话,那么随着库中图像数量的增加,需要输入更多的XML代码。显然,这不仅浪费时间,而且使维护变得更复杂。
下面的示例演示如何在库中动态添加图像,以避免额外的输入。在代码中:
n getImage:用于装载库控件的图片(不是真正的库里面的图片)。
n getItemCount:用于返回库中的项目数。在VBA代码中使用常量来决定这个值,这样如果需要更多的图片项目,只需简单地修改其数值。
n getItemImage:用于装载项目图像,也就是说,每一个显现在库中的图像。
注意,不会遍历每一项,相反,Ribbon将回调getItemImage属性直至遍历由getItemCount属性决定的所有项目。此时,返回代表每个项目的图像的索引值。接下来,使用这个索引来捕获并装载相应的图片。
定制Excel界面库控件的XML代码如下:
insertBeforeMso=“TabHome“
label=“My Custom Tab“>
label=“My Photo Gallery“>
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“>
在Excel VBE中的代码如下:
Public Const gcItemCount = 6
‘rxgal getImage回调
Sub rxgal_getImage(control As IRibbonControl, ByRef returnedVal)
Set returnedVal = LoadPicture(ActiveWorkbook.Path & “\MUN.bmp”)
End Sub
‘rxgal getItemCount回调
Sub rxgal_getItemCount(control As IRibbonControl, ByRef returnedVal)
returnedVal = gcItemCount
End Sub
‘rxgal getItemImage回调
Sub rxgal_getItemImage(control As IRibbonControl, index As Integer, ByRef returnedVal)
Set returnedVal = LoadPicture(ActiveWorkbook.Path & “\img” & index & “.bmp”)
End Sub
‘rxgal onAction回调
Sub rxgal_Click(control As IRibbonControl, id As String, index As Integer)
MsgBox “您单击的图像索引号为 ” & index
End Sub
‘rxbtn onAction回调
Sub rxbtn_Click(control As IRibbonControl)
MsgBox “更多技术请访问:http://www.excelperfect.com”
End Sub
当然,如果BMP格式效果不好,可以使用上篇文章中介绍的LoadImage函数装载PNG格式。
库被设计作为图形化显示用户选项的一种方式,例如样式库,能够通过查看该样式图形化的呈现使用户选择一种样式。可以使用库来组织照片、访问样式、或者存储调色板。在需要并提供可视效果的定制中,库是完美的控件。
此外,在库的底部也可以添加按钮。
库的XML标记如下:
库由静态的、动态的和可选的子属性组成,需要下表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代码:
insertBeforeMso=“TabHome“
label=“My Custom Tab“>
label=“My Photo Gallery“>
label=“My Photo Gallery“
image=“img4“
columns=“2“
rows=“2“
itemWidth=“200“
itemHeight=“150“
showItemLabel=“false“
size=“large“>
(3)在CustomUI Editor中装载名为img0至img5的图像。
(4)保存并关闭CustomUI Editor,然后重新打开该工作簿,即可看到上图所示的自定义库。
使用内置库控件
有时,可能想将开始、插入、页面布局选项卡中的库放置在自定义选项卡中以方便使用,而无须在选项卡之间来回移动。下面的例子将三个内置库控件集中放置在一个自定义选项卡中。XML代码为:
label=“Galleries Tab“>
label=“Gallery Group“>
结果如下图所示。
在运行时创建图像库
如果使用XML代码装载图像的话,那么随着库中图像数量的增加,需要输入更多的XML代码。显然,这不仅浪费时间,而且使维护变得更复杂。
下面的示例演示如何在库中动态添加图像,以避免额外的输入。在代码中:
n getImage:用于装载库控件的图片(不是真正的库里面的图片)。
n getItemCount:用于返回库中的项目数。在VBA代码中使用常量来决定这个值,这样如果需要更多的图片项目,只需简单地修改其数值。
n getItemImage:用于装载项目图像,也就是说,每一个显现在库中的图像。
注意,不会遍历每一项,相反,Ribbon将回调getItemImage属性直至遍历由getItemCount属性决定的所有项目。此时,返回代表每个项目的图像的索引值。接下来,使用这个索引来捕获并装载相应的图片。
定制Excel界面库控件的XML代码如下:
label=“My Custom Tab“>
columns=“2“
rows=“2“
itemWidth=“200“
itemHeight=“150“
getImage=“rxgal_getImage“
getItemCount=“rxgal_getItemCount“
getItemImage=“rxgal_getItemImage“
onAction=“rxgal_Click“
showItemLabel=“false“
size=“large“>
在Excel VBE中的代码如下:
Public Const gcItemCount = 6
‘rxgal getImage回调
Sub rxgal_getImage(control As IRibbonControl, ByRef returnedVal)
Set returnedVal = LoadPicture(ActiveWorkbook.Path & “\MUN.bmp”)
End Sub
‘rxgal getItemCount回调
Sub rxgal_getItemCount(control As IRibbonControl, ByRef returnedVal)
returnedVal = gcItemCount
End Sub
‘rxgal getItemImage回调
Sub rxgal_getItemImage(control As IRibbonControl, index As Integer, ByRef returnedVal)
Set returnedVal = LoadPicture(ActiveWorkbook.Path & “\img” & index & “.bmp”)
End Sub
‘rxgal onAction回调
Sub rxgal_Click(control As IRibbonControl, id As String, index As Integer)
MsgBox “您单击的图像索引号为 ” & index
End Sub
‘rxbtn onAction回调
Sub rxbtn_Click(control As IRibbonControl)
MsgBox “更多技术请访问:http://www.excelperfect.com”
End Sub
当然,如果BMP格式效果不好,可以使用上篇文章中介绍的LoadImage函数装载PNG格式。