摘 要:命令按鈕是用戶與計算機應用程序進行交互的最簡便的方法。面向對象編程語言Visual Basic中的按鈕控件就是命令按鈕,命令按鈕是應用程序中最為常用的控件,但是Visual Basic中的按鈕控件過于簡單,不夠美觀,支持的事件少。為實現多彩多姿命令按鈕,可以利用圖像框裝載漂亮的圖片模擬命令按鈕,通過事件過程實現“命令按鈕”的多種特殊效果,包括按鈕的默認效果、鼠標劃過時按鈕的效果、鼠標單擊時按鈕的效果,按擊回車鍵或逃逸鍵時按鈕的效果。在實際編程中,設計好具有多種效果的按鈕,是能否贏得用戶的一件法寶。
關鍵詞:按鈕;圖像框;屬性;事件;事件代碼;事件過程
中圖分類號:TP311 文獻標識碼:B
文章編號:1004-373X(2008)06-114-03
Various Button Effects by Visual Basic Programming
YANG Zhanhai,XUE Ningjing
(Computer Center,Yan′an University,Yan′an,716000,China)
Abstract:Order button is a consumer and the computer application carries out interactive simple and convenient method.The button control in object-oriented programming language Visual Basic is order button,order button is to be control in common use most in application,button control in Visual Basic is excessively simple,the event being not enough beautiful,hold out is few.Be to realize colorful order button,making use of the image frame to load the beautiful photograph to simulate order button,the button effect,pushes down the effect striking the carriage return key or the escape key time button by the fact that event process realizes various peculiar \"order button\" effect,when button effect,mouse are labeled with Shan strike when effect,the mouse bid streak including the button tacitly approving that.
Keywords:button;image frame;attribute;event;event code;event process
1 引 言
在進行程序設計時,經常需要設計一些形象的、生動的、漂亮的按鈕,更重要的是按鈕在操作上有動態的效果。按鈕通常的狀態有默認狀態、鼠標劃過時的狀態、鼠標單擊時的狀態、按ESC鍵時的狀態、按Enter鍵時的狀態。
如何實現多種效果的命令按鈕,通過Visual Basic編程有各種實現辦法,但如果直接在窗體上創建命令按鈕對象,要實現多種按鈕效果并不容易。例如,Visual Basic提供的命令按鈕外觀是一個矩形,若要實現立體圓柱狀的按鈕,則不容易。在實際編程中,總結經驗,發現使用圖像框去實現按鈕更為自如,更為順手,各種按鈕效果易于實現。
2 對象準備
2.1 圖像按鈕的準備
預先用圖形處理軟件(如Photoshop)制作所需求的圖像按鈕文件。本文中制作4個圖形文件,分別命名為“P1.JPG”,“P2.JPG”,“P3.JPG”,“P4.JPG”,每個圖形的尺寸大小一致,外觀均呈圓柱立體狀。圖形“P1.JPG”中顯示黑暗顏色文字“退出系統”;圖形“P2.JPG”中顯示明亮顏色文字;圖形“3.JPG”中顯示黑暗顏色文字“開始登錄”;圖形“P4.JPG”中顯示明亮顏色文字“開始登錄”。
一個系統經常具有“退出系統”和“開始登錄”這2個按鈕。用“P1.JPG”和“P2.JPG”兩個圖片實現“退出系統”這個按鈕;用“P3.JPG”和“P4.JPG”兩個圖片實現“退出系統”這個按鈕,不同的顏色表示不同的狀態。
2.2 圖像框的準備
窗體是Visual Basic中的對象,在設計程序時,窗體是程序員的“工作臺”,窗體好像一塊“畫布”,在窗體上可以建立其他控件對象,程序運行后,每個窗體對應一個窗口。
在窗體畫出4個圖像框,名稱分別為“Image1”,“Image2”,“Image3”,“Image4”。圖像框“Image1”裝入圖形“P1.JPG”(黑暗顏色文字“退出系統”),圖像框“Image2”裝入圖形“P2.JPG”(明亮顏色文字“退出系統”),圖像框“Image3”裝入圖形“P3.JPG”(黑暗顏色文字“開始登錄”),圖像框“Image4”裝入圖形“P4.JPG”(明亮顏色文字“開始登錄”)。
設定圖像框的尺寸為統一大小。首先把圖片框Stretch屬性為True,以實現當圖像框大小改變時,其中的圖片隨之會自動改變大小以適應圖像框的空間大小。接下來通過圖像框Height和Width屬性去改變圖像框的高度和寬度,把4個圖像框的屬性設為統一的屬性值,從而實現圖像框的尺寸為一樣的大小。
設定圖像框的合理位置。在垂直方向上,若要求4個圖像框處在同樣的高度上,可以通過設置Top屬性實現,也可以通過菜單命令實現(首先選擇4個圖像框對象,然后選擇“格式”菜單,再選擇“對齊”項中的“頂端對齊”命令項);在水平方向上,圖像框“Image1”和“Image2”處于同一位置上,一個在前,一個在后,圖像框“Image3”和“Image4”處于同一位置上,也是一個在前,一個在后,可以通過設置Left屬性實現,也可以通過菜單命令實現(首先選擇同一位置上的2個圖像框對象,然后選擇“格式”菜單,再選擇“對齊”項中的“左對齊”命令項)。
3 用事件過程實現多種按鈕效果
3.1 按鈕的默認狀態
通常,對于“退出系統”和“開始登錄”這樣的兩個按鈕,“開始登錄”一般為事實上的下一步操作。所以不妨把圖片框“Image1”可見性設為真,把圖片框“Image2”可見性設為假,即可以看見黑暗顏色文字“退出系統”按鈕;把圖片框“Image3”可見性設為假,把圖片框“Image4”可見性設為真,即可以看見明亮顏色文字“開始登錄”按鈕。
默認狀態是在窗體運行時,一開始就需要具有的狀態。對于Visual Basic而言,窗體的Load事件在窗體加載就會觸發的其中的事件代碼,所以可以在窗體的Load事件中編寫事件代碼,實現按鈕初始默認狀態。
實現“按鈕”默認狀態的Load事件過程為:
Private Sub Form_Load()
Image1.Visible = True
Image2.Visible = False
Image3.Visible = False
Image4.Visible = True
End Sub
3.2 鼠標劃過時按鈕的狀態
當鼠標光標移入“退出系統”按鈕所在的區域時,“退出系統”按鈕中的文字改變為明亮顏色,“開始登錄”按鈕中的文字改變為黑暗顏色;而當鼠標光標移入“開始登錄”按鈕所在的區域時,“開始登錄”按鈕中的文字改變為明亮顏色,“退出系統”按鈕中的文字改變為黑暗顏色。這種明暗交替的醒目設計,極具藝術性。通過交替改變各個對像框Visual屬性,就可以實現鼠標劃過“按鈕”(實際上對象是圖像框)時的狀態。
圖像框支持移動鼠標光標的移動事件過程,即支持MouseMove事件,該事件并不需要鼠標的按鍵,只需要把鼠標光標移到圖像框后,便可以觸發MouseMove事件。
實現“退出系統”按鈕變明,“開始登錄”按鈕變暗的事件過程為:
Private Sub Image1_MouseMove(Button As Integer,Shift As Integer,x As Single,y As Single)
Image1.Visible = False
Image2.Visible = True
Image3.Visible = True
Image4.Visible = False
End Sub
實現“開始登錄”按鈕變明,“退出系統”按鈕變暗的事件過程為:
Private Sub Image3_MouseMove(Button As Integer,Shift As Integer,x As Single,y As Single)
Image1.Visible = True
Image2.Visible = False
Image3.Visible = False
Image4.Visible = True
End Sub
3.3 鼠標單擊時按鈕的狀態
鼠標單擊按鈕后,往往實現某一過程的調用,但在里,將討論按鈕被按單擊時, “壓下”效果的實現,以及松開鼠標按鍵時按鈕“彈上”效果的實現。下面就以按鈕“開始登錄”為例說明效果實現的原理機制。
移動鼠標光標到圖像框“Image4” (明亮顏色文字“開始登錄”)上,如果壓下鼠標按鈕則產生MouseDown事件;如果松開鼠標按鈕則產生MouseUp事件。
接下來關鍵的問題是如何實現“壓下”效果和“彈上”效果。可以通過改變圖像框在窗體中位置的方法實現預期的效果,當壓下鼠標按鈕時,給圖像框的Top增加100twip,當松開鼠標按鈕時,給圖像框的屬性Top減少100twip。通過這種改變圖像框Top屬性值方法,“按鈕”將來就可以按動。
用于實現“開始登錄”單擊的事件過程為:
Private Sub Image4_Click()
′ 調用“開始登錄”代碼
End Sub
用于實現“壓下”效果的事件過程為:
Private Sub Image4_MouseDown (Button As Integer,Shift As Integer,x As Single,y As Single)
Image4.Top = Image4.Top + 100
End Sub
用于實現“彈上”效果的事件過程為:
Private Sub Image4_MouseUp (Button As Integer,Shift As Integer,x As Single,y As Single)
Image4.Top = Image4.Top - 100
End Sub
3.4 按Esc鍵和Enter鍵時按鈕的反應
一個良好的窗體界面,其上的按鈕不僅可以用鼠標來選擇操作,也可以支持鍵盤的操作。下面,就以按Esc鍵退出系統,按Enter鍵開始登錄為例進行分析討論。
按下鍵盤上某個鍵時,將發生KeyPress事件。嚴格的說,當按下某個鍵時,所觸發的是擁有輸入焦點(Focus)的那個控件的KeyPress事件。在某一時刻,輸入焦點只能位于某一個控件上。如果窗體上沒有活動的或可見的控件,則輸入焦點位于窗體上。當一個控件或窗體擁有輸入焦點,該控件或窗體將接收從鍵盤上輸入的信息。
在默認情況下,控件的鍵盤事件優于窗體的鍵盤事件。因此在發生鍵盤時,總是先激活控件的鍵盤事件。如果希望窗體先接收鍵盤事件,則必須把窗體的KeyPreview屬性設為True,否則不能激活鍵盤事件。
這里,在任何情況下,都要實現按Esc鍵退出系統,按Enter鍵開始登錄,所以必須把窗體的KeyPreview屬性設為True。另外,在編寫事件代碼時,需要注意參數KeyAscii是一個預定義的變量,執行KeyPress事件過程時,KeyAscii是所按鍵的ASCII值。已知Esc鍵的ASCII值為27,Enter鍵的ASCII值為13,那么,就可以通過KeyAscii的值是否為27或13做出相應的判斷。
實現Esc鍵和Enter鍵按鈕的反應的KeyPress事件過程如下:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Image4_Click
End If
If KeyAscii = 27 Then
Call Image1_Click
End If
End Sub
4 結 語
使用Visual Basic這一面向對象編程語言,編寫程序界面時,充分利用對象的Load,Click,MouseDown,MouseUp以及KeyPress事件,綜合構建,從而實現具有多種效果的界面按鈕。
設計具有多種效果的按鈕,是實現友好界面的重要環節,是能否贏取用戶的一門法寶,在實際編程中,應該根據用戶需求,設計好具有多種效果的按鈕。
參考文獻
[1]劉炳文.Visual Basic程序設計[M].2版.北京:清華大學出版社,2003.
[2]吳紹根,陳建潮.Visual Basic程序設計基礎[M].北京:人民郵電出版社,2006.
[3]\\[美\\]Diane Zak.Visual Basic 6.0程序設計[M].北京:電子工業出版社,2007.
[4]\\[美\\]布蘭德妮,\\[美\\]米爾斯博格.VB.NET大學教程[M].北京:清華大學出版社,2004.
作者簡介 楊戰海 男,1972年出生,陜西涇陽人,講師,碩士研究生。研究方向為計算機算法、數據庫技術。
薛寧靜 女,1978年出生,講師。研究方向為計算機網絡。