用手工制作的工具栏,实际上是一个放置了一些工具按钮的图片框。通过设置图片框的Align属性,可以控制工具栏(图片框)在窗体中的位置,当改变窗体的大小时,Align属性值非0的图片框会自动地改变大小,以适应窗体的宽度或高度。
图片框上各种工具按钮,如命令按钮、图形方式的选项和复选框、下拉列表控件等,可以通过不同的图像来表示对应的功能,还可以设置按钮的ToolTipText属性为工具按钮添加工具提示。对于有些按钮如复选框等,需在其上放置两个图像,分别代表按钮弹起及按下时的外观。
例如,通过在窗体上添加一个图片框Picture1和文本框Text1,并在图片框中增加一个命令按钮数组Commadn1(0)~Command1(2)。然后将命令按钮的Caption属性值设为空白,Style属性设为1-Graphical,Picture属性分别设为New.bmp、Open.bmp和Save.bmp。建立好的用户界面如图7.9所示。

图7.9 手工制作的工具栏
由于工具按钮通常用于提供对其他(菜单)命令的快捷访问,所以一般都是在其Click事件代码中调用对应的菜单命令。
7.2.2 Toolbar控件与ImagList控件
要在工具栏中放置一系列图片按钮,最直接的方法是在窗体上添加工具栏(Toolbar)控件和图像列表(ImageList)控件。Toolbar控件和ImageList控件是ActiveX控件的一部分,在使用前必须加载"Microsoft Windows Common Controls 6.0",然后才能使用工具箱中新添加的ImageList

控件和Toolbar

控件。
1. 创建ImageList控件
ImageList控件的作用像图像的储藏室,ImageList控件不能独立使用,它需要Toolbar控件(或ListView,TabStrip,TreeView控件等)来显示所储存的图像。ImageList控件可以包含任意大小的所有图片文件,但是图片的显示大小都相同。通常,加入该控件的第一幅图像决定了随后加入图像的显示大小。
在设计时,可以在ImageList属性页中添加图像,按照顺序将需要的图像插入到ImageList中。例如,在窗体上创建ImageList1后,用鼠标右键单击ImageList1控件,出现弹出式菜单,选择"属性"命令,或者选中窗体上的ImageList1后在属性窗口选择"(自定义)"右边的三点按钮,都可以打开"属性页"对话框。选择"图像"选项卡,在"图像"选择卡中就可以插入图片了,如图7.10所示。
ImageList控件的ListImage属性是对象的集合,每个对象可以存放图片文件。图片文件类型有.bmp,.cur,.ico,.jpg和.gif等,并可通过索引(Index)或关键字(Key)来引用每个对象。控件具有标准的集合方法:Add,Remove和Clear。利用这些方法,用户可以在运行时添加、删除图像。一旦ImageList关联到其他控件,就不能再删除或插入图像了。

图7.10 ImageList控件属性页
2. 设置工具栏的属性
用鼠标双击Toolbar控件,它将加入窗体并出现在窗体的顶部(也可单击控件后在窗体中画出控件)。通过设置Toolbar1的Align属性可以控制工具栏在窗体中的位置。当改变窗体的大小时,Align属性值为非0的工具栏会自动改变大小以适应窗体的宽度或高度。
用鼠标右键单击窗体上的Toolbar1,在弹出的快捷菜单中选择"属性",将打开"属性页"对话框,如图7.11所示。"通用"选项卡中的"图像列表"属性将被用来与ImageList控件建立关联。


图7.11 Toolbar属性页 图7.12 "按钮"选项卡
将属性页切换到"按钮"选项卡,创建按钮(Button)对象,如图7.12所示。其中各项功能说明如下:
(1) 插入按钮、删除按钮:在Button集合中添加或删除元素。通过Button集合可以访问工具栏中的各个按钮。
(2) 索引、关键字:工具栏中的按钮通过Button集合进行访问,集合中的每个按钮都有唯一的标识,Index属性和Key属性就是这个标识。Index为整型,Key为字符串型,访问按钮时可以引用二者之一。
(3) 标题(Caption)、描述:标题是显示在按钮上的文字;描述是按钮的说明信息。
(4) 值(Value):Value属性决定按钮的状态,0-tbrUnpressed为弹起状态,1-tbrPressed为按下状态。
(5) 样式(Style):Style属性决定按钮的行为特点。与按钮相关联的功能可能受到按钮样式的影响,如表7.4所示。
表7.4 Button对象Style属性设置值
|----------------|---|---------------------------------------------------------------------|
| 常 数 | 值 | 说 明 |
| tbrDefault | 0 | 默认值。按钮是一个规则的下压按钮,如保存文件 |
| tbrCheck | 1 | 复选按钮。具有下压、放开两种状态。当按钮代表的功能是某种开关类型时,可用复选样式,如加粗、倾斜、下划线等 |
| tbrButtonGroup | 2 | 选项按钮。当一组按钮功能相互排斥时,可使用选项按钮组样式。同一时刻只能有一个按钮被按下,但可同时处于抬起状态,如两端对齐、居中、右对齐 |
| tbrSeparator | 3 | 分隔符。只创建宽度为8个像素的按钮,没有其他功能。可将其他按钮分隔开 |
| tbrPlaceholder | 4 | 占位符。其外观和功能类似分隔符,但是可以设置其宽度。可用来在工具栏上显示其他控件,如ComboBox控件、ListBox控件 |
| tbrDropDown | 5 | 下拉式菜单按钮,如字体颜色 |
(6) 宽度(Width):当Style为4时,可设置按钮的宽度。
(7) 图像(Image):按钮上显示的图片在ImageList控件中的编号。
(8) 工具提示文本(ToolTipText):程序运行时,当鼠标指向按钮时显示的说明。
在设计时,可以很方便地在工具栏控件中放置其他控件,例如,组合框、文本框或选项按钮控件等,这可按照下面的步骤执行:
(1) 创建工具栏控件,设置属性。
(2) 在工具栏中为希望显示的其他控件留出空间,然后加入占位符式按钮,将其宽度设置为合适的值。
(3) 在占位符按钮上绘制其他控件。
3. 编写ButtonClick事件代码
工具栏控件的常用事件有ButtonClick事件和Change事件。当用户单击按钮(占位符和分隔符样式的按钮除外)时,将激发ButtonClick事件。此时可以用按钮的Index属性或Key属性标识被单击的按钮。
【例7.3】 利用工具栏来实现例7.1中的字体变化。
分析:为了能够输入更多的文字,这里使用文本框Text1代替了例7.1中的标签,并将文本框的MultiLine属性值设为True,ScrollBars属性值设为2-Vertical。
(1) 利用添加部件将ImageList和Toolbar控件放入工具箱。
(2) 在窗体上添加ImageList1控件,通过其属性窗口,依次将Graphic\Bitmaps\Tlbr_w95目录中的图片文件Bld.bmp,Itl.bmp,Undrln.bmp加入到图像框内。
(3) 双击工具箱中的Toolbar控件,在窗体的顶部添加一个工具栏Toolbar1。打开Toolbar1属性对话框,在"通用"选项卡中将图像列表的属性值改为ImageList1,建立与图像列表控件的关联。还可以将样式属性值改为1(tbrFlat式样)。在"按钮"选项卡中依次插入按钮:1,2,3,并同时注意修改他们的图像属性值(这里依次为1,2,3)。由于加粗、倾斜、下划线为复选按钮,还应将三个按钮的样式属性值设为1。
(4) 编写程序代码:
Private Sub Form_Resize()
With Text1
.Top = Toolbar1.Height
.Left = 0
.Height = Form1.ScaleHeight - Toolbar1.Height
.Width = Form1.ScaleWidth
End With
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
n = Button.Index
Select Case n
Case 1
Text1.FontBold = Not Text1.FontBold
Case 2
Text1.FontItalic = Not Text1.FontItalic
Case 3
Text1.FontUnderline = Not Text1.FontUnderline
End Select
End Sub
运行程序,显示界面如图7.13所示。

图7.13 例7.3的用户界面
可以用ToolTipText属性设置提示文本。设计时,在Toolbar1控件属性页中的"工具提示文本"框中输入需要的文本,即可为按钮加入提示文本。运行时,可通过设置Button对象的ToolTipText属性动态地改变提示文本。
工具栏控件提供的另一功能是用户定制工具栏。如果将工具栏控件的AllowCustomize属性设置为True,则当用户双击工具栏时,即可显示出"自定义工具栏"对话框。在代码中可以通过调用Customize方法显示对话框。"自定义工具栏"的对话框如图7.14所示。

图7.14 "自定义工具栏"对话框
当用户利用"自定义工具栏"对话框定制了自己的工具条时,Change事件被激活。通常,在该事件中保存用户的定制。
如果允许用户重新配置工具栏控件,那么需要用SaveToolbar和RestoreToolbar方法保存和恢复该工具栏。例如,如果多个用户同时使用同一个应用程序,但他们的使用习惯不同,则可以用SaveToolbar方法使用户能够创建自己的定制工具栏。然后创建一个登录过程,用来标识每个用户,并通过RestoreToolbar方法,根据登录信息恢复用户个人的工具栏。