所有宿主应用程序都有一个扩展接口,以便添加和设计自定义工具栏(添加内置按钮、添加作为按钮的宏,甚至给工具栏添加弹出式控件)。用 Visual Basic 代码所作的设计期修改通常用于添加或修改组合框控件。而用代码对工具栏所作的修改几乎完全属于运行时间修改(改变按钮的状态、外观、功能等等)。
在运行时间可对工具栏作多种不同的修改。其中之一是改变命令栏按钮在工具栏上的状态。每个按钮控件都有两种活动状态:按下状态 (True) 和未按下状态 (False)。要改变按钮控件的状态,可为 State 属性赋予适当的常量,如本主题后面的表中所述。
在运行时间可作的另一种修改是改变按钮的外观或功能。要改变按钮的外观而不改变其功能,可用 CopyFace 和 PasteFace 方法。这些方法可用于将某个特殊按钮的图符复制到“剪贴板”,或将该按钮图符导入另一个应用程序以改变它的某些特性。用 PasteFace 方法可将按钮图符从“剪贴板”转移到指定的按钮上。
要将按钮的动作改为自定义的功能,可给该按钮的 OnAction 属性指定一个自定义过程名。
下表列举了大多数常用的修改按钮状态、外观或动作的属性和方法。
属性或方法 | 说明 |
---|---|
CopyFace,PasteFace | 将图像复制或粘贴在按钮的图符上。用 CopyFace 方法可将指定按钮的图符复制到“剪贴板”上。用 PasteFace 方法可将“剪贴板”上的内容粘贴到指定按钮的图符上。如果“剪贴板”上没有图像,那么 PasteFace 方法失效。如果“剪贴板”上的图像对按钮图符来说太大,那么该图像不会按比例缩小。 一般来说,在设计期复制和粘贴按钮图符更方便,但也可在运行时间修改按钮图符。还可用 FaceId 属性为按钮指定一个不同的内置按钮图符。 |
Id | 指定代表按钮内置函数的值。例如,一个可将突出显示文本复制到“剪贴板”上的按钮,具有的 Id 值为 19。 |
State | 指定按钮的外观或状态。该值可设置为 MsoButtonState 的以下常量之一:msoButtonDown、msoButtonMixed 或 msoButtonUp。 |
Style | 指定按钮图符是显示其图标还是显示其标题。该值可设置为 MsoButtonStyle 的以下常量之一:msoButtonAutomatic、msoButtonIcon、msoButtonCaption、msoButtonIconandCaption、msoButtonIconAndCaptionBelow、msoButtonIconAndWrapCaption、msoButtonIconAndWrapCaptionBelow 或 msoButtonWrapCaption。 |
OnAction | 指定在用户单击按钮、显示菜单或更改一个组合框控件的内容时所运行的过程。 |
Visible | 指定控件对用户是显示还是隐藏。 |
Enabled | 使一个命令栏生效或失效。失效的命令栏名不显示在有效命令栏列表中。 |
以下示例创建了包含一个命令按钮的命令栏。通过 CommandBarButton 对象的 OnAction 属性,可用 CopyFace 方法将内置的“打开”按钮的按钮图符复制到“剪贴板”上,再用 PasteFace 方法将其粘贴到已存在的按钮上。这样就在运行时间修改了命令栏按钮的外观。
Sub testAddModifyToolbars1()
Set myBar = CommandBars _
.Add(Name:="ChangingButton", Position:=msoBarTop, _
Temporary:=True)
myBar.Visible = True
Set oldControl = myBar.Controls _
.Add(Type:=msoControlButton, _
ID:=CommandBars("Standard").Controls("Copy").Id)
oldControl.OnAction = "changeFaces"
End Sub
Sub changeFaces()
Set newControl = CommandBars.FindControl _
(Type:=msoControlButton, _
ID:=CommandBars("Standard").Controls("Paste").Id)
newControl.CopyFace
Set oldControl = _
CommandBars("ChangingButton").Controls(1)
oldControl.PasteFace
End Sub
编辑框、下拉式列表框和组合框都是功能强大的新控件,可以添加到 Visual Basic 应用程序的工具栏中。然而,大多数容器应用程序需要用 Visual Basic 代码来设计这些控件。要设计一个组合框,可用下表所述的属性和方法。
属性或方法 | 说明 |
---|---|
Add | 如果要在命令栏中添加一个组合框控件,可为 Type 参数指定以下 MsoControlType 常量之一:msoControlEdit、msoControlDropdown 或 msoControlComboBox。 |
AddItem | 在下拉式列表框或组合框的下拉式列表区中添加一个列表项。可为已有列表中的新项指定一个索引号,但其数值不能大于列表中的项目数,否则 AddItem 方法失败。 |
Caption | 为组合框控件指定标签。如果将 Style 属性设置为 msoComboLabel,那么该标签将在该控件旁显示。 |
Style | 确定指定控件的标题是否显示在该控件旁。该值可设置为 MsoComboStyle 的以下常量之一:msoComboLabel(显示标签)或 msoComboNormal(不显示标签)。 |
OnAction | 指定当用户改变组合框控件的内容时要运行的过程。 |
以下示例在自定义工具栏中添加一个带标签“Quarter”的组合框,并给该控件分配一个名为“ScrollToQuarter”的宏。
Set myBar = CommandBars _
.Add(Name:="Custom", Position:=msoBarTop, _
Temporary:=True)
myBar.Visible = True
Set newCombo = myBar.Controls _
.Add(Type:=msoControlComboBox)
With newCombo
.AddItem "Q1"
.AddItem "Q2"
.AddItem "Q3"
.AddItem "Q4"
.Style = msoComboNormal
.OnAction = "ScrollToQuarter"
End With
在运行应用程序时,每次用户改变组合框控件时,都将调用分配给该控件的 OnAction 属性的过程。在该过程中,可用 CommandBars 对象的 ActionControl 属性找出被修改的控件,并返回改变的值。ListIndex 属性将返回组合框中所键入或选择的项。