在諸多Windows應用程序開發平臺中,Microsoft Visual Basic以易學易用、功能強大的優點特出獨立,成為開發Windows應用程序的首選平臺之一。在VB4.0及以前的版本中,開發象Word7.0中的工具條還是頗費辛苦的。一般思路是在窗體(Form)中安放一個圖片框(PictureBox)作為容器(Container),再往其中加入圖象(Image)控件,用圖象控件載入圖標來模擬按鈕。對多個按鈕的控制要分別完成,管理較為復雜。在VB5.0中,系統提供了一個專門的工具條控件Toolbar。用Toolbar來實現類似Word7.0中的工具條非常方便。
工具條控件Toolbar簡介
1.在工具箱中加入Toolbar
工具條控件Toolbar不在VB5.0工具箱(Toolbox)的常規標準控件之列,因此在首次安裝VB5.0后,工具箱中并沒有Toolbar。在工具箱中加入Toolbar要通過Project菜單中的Components命令,該命令彈出一個選擇安裝組件的窗口。在Components窗口的Controls組中找到“Microsoft Windows CommonControls5.0”項,單擊標記該項,然后單擊“確定”按鈕,Toolbar和另外一些控件就加入工具箱了。
2.Toolbar的功能
Toolbar中可以加入按鈕,每個按鈕都可以載入自己的圖象、設置標題(Caption)。還可以為每個按鈕設置簡短的提示字符串,程序運行時,當鼠標指針移到按鈕上時,在指針附近會自動浮出提示字符串。在程序運行時,可以隨時增加或刪除按鈕。Toolbar為其中的按鈕提供了分組功能,用戶只需簡單地設置一個按鈕的Style屬性就能實現按鈕之間的分組。Toolbar同時還是一個容器類控件,可以在其中加入組合框等其它控件。Toolbar的Allow C omize屬性允許用戶在程序運行時雙擊工具條對其中的內容進行裁剪。根據這些功能,用戶就可以輕而易舉地在自己開發的應用程序中加入類似Word7.0風格的工具條了。
Toolbar的制作
Toolbar的制作包括以下步驟:在窗體中加入Toolbar控件;在Toolbar中加入按鈕;為按鈕載入圖象并設置其它屬性。
1.在窗體中加入Toolbar控件
雙擊工具箱中的Toolbar,Toolbar就自動加入窗體并放置在窗體客戶區的頂端。如果要把Toolbar放置在其它位置,可以在屬性窗口中改變Toolbar的Align屬性。Toolbar的Align屬性中可供選擇的有5個值:
0-vbAlignNone,不對齊
1-vbAlignTop,對齊窗口客戶區頂端
2-vbAlignBottom,對齊窗口客戶區底端
3-vbAlignLeft,對齊窗口客戶區左邊
4-vbAlignRight,對齊窗口客戶區右邊
2.在Toolbar中加入按鈕
用鼠標右鍵單擊Toolbar,會彈出Toolbar的屬性菜單。單擊菜單的最后一項“Properties”,會彈出Toolbar的屬性頁(PropertyPages)窗口。在屬性頁窗口中可以設置控件的一些非常規屬性。
在Toolbar屬性頁中選Buttons組,其中的“InsertButton”和“RemoveButton”兩個按鈕分別用于在Toolbar中加入和刪除按鈕。Toolbar控件的所有按鈕構成一個按鈕集合(Collection),名為Buttons。在Toolbar中加入和刪除按鈕實際上是對Toolbar的Buttons集合進行加入和刪除元素操作。對于Toolbar中各個按鈕的訪問,也是通過Buttons集合進行的。用“InsertButton”加入按鈕后,可以在Toolbar屬性頁Buttons中設置新加入的按鈕的屬性。這些屬性包括:索引(Index)、標題(Caption)、描述信息(Description)、關鍵字(Key)、初態(Value)、模式(Style)、寬度(Width)、提示信息(ToolTipText)等。
(1)Index和Key
Toolbar中的按鈕是通過集合Buttons來訪問的。集合中每個按鈕都有唯一與之對應的標識,Index和Key就是與按鈕一一對應的標識。Index是整數類型的,類似于數組的下標。Key是字符串類型的類似于對象的名字,但它與名字不同的是引用時必須加雙引號,并且它中間可以包含任意的字符。按鈕的Key屬性是可選的,可以為空。訪問按鈕時可以引用Index和Key二者之一。例如,在名為Toolbar1的Toolbar中加入按鈕,其Index為1,Key設置為“1stbutton”。在程序中可以通過以下兩種方式之一訪問該按鈕:
Toolbar1.Buttons(1)
或
Toolbar1.Buttons(“1stbutton”)
(2)Caption
Caption屬性對應按鈕上顯示的文本,與普通按鈕的Caption屬性相同。
(3)ToolTipText和Description
ToolTipText和Description都是字符串類型,用于設置按鈕的提示文本和描述信息。設置了ToolTipText后,程序啟動運行后,當用戶把鼠標指針移到按鈕上時,ToolTipText對應的文本字符串自動浮出。該屬性用于在程序運行時提示用戶按鈕的功能。程序啟動運行后,用戶雙擊工具條對其中的內容進行裁剪時,對話窗中每個按鈕旁邊顯示的是按鈕的Description屬性。
(4)Style
Style屬性設置按鈕的模式,不同模式的按鈕具有不同的風格和作用。可供選擇的Style屬性有以下5種:
0-tbrDefault,一般按鈕
1-tbrCheck,開關按鈕
2-tbrButtonGroup,編組按鈕
3-tbrSeparator,分隔按鈕
4-tbrPlaceholder,占位按鈕
一般按鈕與普通的按鈕控件在操作風格上基本相同。開關按鈕具有二值狀態:按下和放開。編組按鈕用于實現按鈕之間的分組,相鄰的編組按鈕都屬于同一組。編組按鈕同時也是開關按鈕,同組內至多只允許一個按鈕處于按下狀態。分隔按鈕在Toolbar中并不顯示,而是把它左右的按鈕分隔開來。Toolbar中的按鈕本來是緊挨著排列的,使用分隔按鈕可以讓同類或同組的按鈕并列排放而與鄰近的組分開。占位按鈕在Toolbar中也不顯示,它僅僅起到占位的作用。在占位按鈕處可以安放其它控件諸如組合框之類。占位按鈕是唯一可以設置寬度(Width)屬性的按鈕。
(5)Value
Value屬性設置按鈕的按下和放開狀態。該屬性一般用于設置開關按鈕和編組按鈕的初態。
(6)Width
在屬性頁的Buttons組中可以看到,Width屬性后有一個Placeholder的附加說明。只有當按鈕的Style設置為Placeholder時,該屬性才能被設置,其它情況下該屬性被禁止。
3.為按鈕載入圖象
工具條按鈕的一個突出特點是包含形象的圖象,用以提示按鈕的功能。在Toolbar中加入所需的按鈕后,就可以為每個按鈕載入圖象了。Toolbar按鈕與普通的Image和PictureBox不同,它們沒有Picture屬性。要給Toolbar按鈕載入圖象需要借助于另一個控件ImageList。
ImageList是在“Microsoft Windows CommonControls5.0”中與Toolbar一并提供的控件。該控件不單獨使用,而是專門為其它控件提供圖象庫。Toolbar中按鈕的圖象就要從ImageList的圖象庫中提取。
為Toolbar按鈕載入圖象的方法是:首先在Toolbar所在的窗體中加入ImageList控件,其次在ImageList中加入圖象,然后建立Toolbar和ImageList的關聯關系,最后從ImageList的圖象庫中選擇圖象載入Toolbar的按鈕。
(1)在ImageList中加入圖象
與Toolbar控件類似,鼠標右鍵單擊窗體中的ImageList控件時,會彈出其屬性菜單。選菜單的最后一項“Properties”會彈出ImageList的屬性頁窗口。在屬性頁窗口中選Images組,在這里可以為ImageList的圖象庫中加入圖象,并為每個圖象設置關鍵字屬性。
單擊“InsertPicture”按鈕可以在圖象庫中插入圖片。系統彈出一個選擇圖片(Selectpicture)的窗口,從該窗口中可以選定一個或多個圖象文件。單擊“打開”按鈕,選定的圖片就插入圖象庫了。ImageList允許插入位圖文件(.bmp)和圖標(.ico)文件。
(2)建立Toolbar和ImageList的關聯關系
打開Toolbar的屬性頁窗口,在General組中有一個標題為ImageList的下拉式列表框。單擊打開該列表框,其中列出了本窗體中所有的ImageList控件。單擊選定一個ImageList控件,Toolbar就與該ImageList建立了關聯關系。
(3)為Toolbar按鈕載入圖象
建立好Toolbar和ImageList的關聯關系后,Toolbar屬性頁窗口的Buttons組中Image項就從禁止狀態變為有效了。在Image項的文本框中輸入ImageList圖象庫里某個圖片的Index值,該圖片就被載入該按鈕了。
Toolbar的常用屬性和方法
設置好Toolbar之后,有必要對其常用的屬性和方法作一了解,以便在程序中對它進行控制。Toolbar與其它控件類似的常用屬性在此不作贅述。
1.常用屬性
(1)ImageList
該屬性設置與Toolbar相關聯的ImageList對象。
(2)AllowCustomize
該屬性設置是否允許用戶在程序運行時對Toolbar的內容進行裁剪。該屬性的缺省值是True。
(3)ShowTips
該屬性決定程序運行過程中,當鼠標指針移到Toolbar按鈕上時,是否浮出該按鈕的ToolTipText文本提示。該屬性的缺省值是True。
(4)ToolTipText
該屬性設置Toolbar自己的文本提示字符串。Toolbar的每個按鈕可以有自己的ToolTipText,同時Toolbar本身也可以有自己的ToolTipText。程序運行過程中,當鼠標指針移到Toolbar按鈕上時,如果Toolbar和按鈕都設置了ToolTipText,則兩個提示字符串都會浮出。
2.常用方法
對Toolbar的控制主要是針對其中的按鈕,Toolbar中的按鈕是作為一個名為Buttons的集合對象供程序訪問的。Buttons的常用方法包括增加一個按鈕(Add)、刪除一個按鈕(Remove)和刪除所有按鈕(Clear)。
(1)Add
Add方法的語法為:
Toolbar控件名.Buttons.Add(index,key,caption,style,image)
整型參數index指定新增按鈕的索引值,該索引值也決定了按鈕在Toolbar中的位置。Index參數可以省略(注意,省略index參數時其后的逗號要照寫),缺省情況下新增按鈕加到Buttons集合的最后。
字符串型參數key指定新增按鈕的關鍵字,該參數可以省略。
字符串型參數caption指定新增按鈕的標題,該參數可以省略。
整型參數style指定新增按鈕的Style屬性,其合法取值有5個,參見前面Style屬性的介紹。該參數可以省略,缺省時自動取0(tbrDefault)。
參數image指定給新增按鈕載入的圖象,圖象必須是與該Toolbar相關聯的ImageList控件圖象庫中的一個。Image參數可以是一個整數,對應ImageList圖象庫中某個圖片的Index值,也可以是一個字符串,對應圖片的關鍵字Key。
(2)Remove
Remove方法的語法為:
Toolbar控件名.Buttons.Remove按鈕的Index值
或
Toolbar控件名.Buttons.Remove按鈕的Key字符串
(3)Clear
Clear方法的語法為:
Toolbar控件名.Buttons.Clear
在程序中生成Toolbar
以上從設計階段(designtime)和程序角度介紹了Toolbar的生成和使用。下面我們結合實例來看看如何為自己的應用程序添加功能強大、方便用戶的工具條。
下面的例子中,窗口工具條內有兩個分別代表打開文件和文件存盤的按鈕,另外還有一個設置窗口客戶區顏色的組合框。為免去煩瑣地介紹工具條的設置過程,在窗體制作時僅僅加入一個Toolbar控件和一個ImageList控件,另外在Toolbar中加入一個組合框ComboBox。其它所有與Toolbar的設置和控制有關的操作都在程序代碼中實現,包括為ImageList1加入圖片庫、建立Toolbar1和ImageList1的關聯關系、在Toolbar1中加入按鈕并為每個按鈕設置屬性、對Combo1進行初始化等等。下面給出窗體Form1的程序代碼。
PrivateSubForm_Load()
’CreateobjectvariablefortheImageList.
DimimgXAsListImage
’LoadpicturesintotheImageListcontrol.
SetimgX=ImageList1.ListImages._
Add(,”open”,LoadPicture(“Graphicsitmapslbr_w95open.bmp”))
SetimgX=ImageList1.ListImages._
Add(,”save”,LoadPicture(“Graphicsitmapslbr_w95save.bmp”))
Toolbar1.ImageList=ImageList1
’CreateobjectvariablefortheToolbar.
DimbtnXAsButton
’AddbuttonobjectstoButtonscollectionusingthe
’Addmethod.Aftercreatingeachbutton,setboth
’DescriptionandToolTipTextproperties.
Toolbar1.Buttons.Add,,,tbrSeparator
SetbtnX=Toolbar1.Buttons.Add(,“open”,,tbrDefault,“open”)
btnX.ToolTipText=”OpenFile”
btnX.Description=btnX.ToolTipText
SetbtnX=Toolbar1.Buttons.Add(,“save”,,tbrDefault,“save”)
btnX.ToolTipText=”SaveFile”
btnX.Description=btnX.ToolTipText
SetbtnX=Toolbar1.Buttons.Add(,,,tbrSeparator)
’ThenextbuttonhasthePlaceholderstyle.A
’ComboBoxcontrolwillbeplacedontopofthisbutton.
SetbtnX=Toolbar1.Buttons.Add(,“combo1”,,tbrPlaceholder)
btnX.Width=1500’Placeholderwidthtoaccommodateacombobox.
Show’ShowformtocontinueconfiguringComboBox.
’ConfigureComboBoxcontroltobeatsamelocationasthe
’ButtonobjectwiththePlaceHolderstyle(key=“combo1”).
WithCombo1
.Width=Toolbar1.Buttons(“combo1”).Width
.Top=Toolbar1.Buttons(”combo1”).Top
.Left=Toolbar1.Buttons(“combo1”).Left
.AddItem“Black”’Addcolorsfortext.
.AddItem“Blue”
.AddItem“Red”
.ListIndex=0
EndWith
EndSub
PrivateSubForm_Resize()
’ConfigureComboBoxcontrol.
WithCombo1
.Width=Toolbar1.Buttons(“combo1”).Width
.Top=Toolbar1.Buttons(“combo1”).Top
.Left=Toolbar1.Buttons(“combo1”).Left
EndWith
EndSub
PrivateSubtoolbar1_ButtonClick(ByValButtonAsButton)
’UsetheKeypropertywiththeSelectCasestatementtospecify
’anaction.
SelectCaseButton.Key
CaseIs=“open”’Openfile.
MsgBox“Addcodetoopenfilehere!”
CaseIs=“save”’Savefile.
MsgBox“Addcodetosavefilehere!”
EndSelect
EndSub
PrivateSubCombo1_Click()
’ChangebackcolorofformusingtheComboBox.
SelectCaseCombo1.ListIndex
Case0
Form1.BackColor=vbBlack
Case1
Form1.BackColor=vbBlue
Case2
Form1.BackColor=vbRed
EndSelect
EndSub