【正文】
Visual Basic程序設(shè)計 (等級考試版 ) 史春聯(lián) 主 編 高等院校應(yīng)用型特色規(guī)劃教材 ? 第 1章 Visual Basic程序開發(fā)環(huán)境 ? 第 2章 對象及其操作 ? 第 3章 簡單程序設(shè)計 ? 第 4章 Visual Basic 程序設(shè)計基礎(chǔ) ? 第 5章 數(shù)據(jù)的輸入輸出 ? 第 6章 控制結(jié)構(gòu) ? 第 7章 數(shù)組 ? 第 8章 常用標(biāo)準(zhǔn)控件 ? 第 9章 過程 ? 第 10章 鍵盤與鼠標(biāo)事件過程 ? 第 11章 菜單程序設(shè)計 ? 第 12章 Visual Basic程序開發(fā)環(huán)境 ? 第 13章 多重窗體程序設(shè)計環(huán)境應(yīng)用 ? 第 14章 文件處理 ? 第 15章 多媒體應(yīng)用開發(fā) ? 第 16章 數(shù)據(jù)庫編程初步 第 10章 鍵盤與鼠標(biāo)事件過程 ? KeyPress 事 件 ? KeyDown和 KeyUp事件 ? 鼠標(biāo)事件 ? 鼠標(biāo)光標(biāo)的形狀 ? 拖放 KeyPress 事件 ? 當(dāng)擊打鍵盤上的某個按鍵時,將發(fā)生 KeyPress事件。該事件可用于窗體、復(fù)選框、組合框、命令按鈕、列表框、圖片框、文本框、滾動條及與文件有關(guān)的控件。嚴(yán)格地說,當(dāng)按下某個鍵時,所觸發(fā)的是擁有輸入焦點(diǎn)( Focus)的那個控件的 KeyPress事件。 KeyPress事件過程一般格式為: Private Sub Text1_KeyPress(KeyAscii As Integer) End Sub ? KeyPress事件帶有一個參數(shù), KeyAscii As Integer。KeyPress事件用來識別按鍵的 ASCII碼。參數(shù) KeyAscii是一個預(yù)定義的變量,執(zhí)行 KeyPress事件過程時,KeyAscii是所按鍵的 ASCII碼。 KeyPress 事件 ? 例 編寫口令程序。 ? 用文本框的 Password屬性編寫過口令程序,下面的口令程序是用KeyPress事件編寫的。 ? 首先在窗體上畫一個標(biāo)簽和一個文本框,如圖所示 Private Sub Form_Load() = ******** = 10 = 16 = True = 宋體 = 請輸入密碼: End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) Static Password As String Static Counter As Integer Static Num As Integer Num = Num + 1 If Num = 6 Then End Counter = Counter + 1 Password = Password + Chr$(KeyAscii) KeyAscii = 0 = String$( Counter,*) If LCase$(Password) = aaa Then = Password = 0 MsgBox 密碼正確,請繼續(xù) Counter = 0 Print Continue…… ElseIf Counter = 3 Then Counter = 0 Password = = MsgBox 密碼不正確,請查實(shí)后重新輸入! End If End Sub KeyPress 事件 ? 程序運(yùn)行后,在文本框中輸入口令,如果口令正確,則顯示相應(yīng)的信息,單擊“ 確定 ” 按鈕后,將顯示一行信息;如果口令不正確,則要求重新輸入。 3次輸入的口令都不正確,則停止輸入,并結(jié)束程序。 KeyDown和 KeyUp事件 ? KeyDown和 KeyUp事件返回的是鍵盤的直接狀態(tài),而 KeyPress并不反映鍵盤的直接狀態(tài)。換言之, KeyDown和 KeyUp事件返回的是 “ 鍵 ” ,而 KeyPress事件返回的是 “ 字符 ” 的 ASCII碼。例如,當(dāng)按字母鍵 “ A‖時, KeyDown所得到的KeyCode碼( KeyDown事件的參數(shù))與按字母鍵 “ a‖是相同的,而對 KeyPress來說,所得到的 ASCII碼不一樣。 KeyDown和 KeyUp事件 ? KeyDown和 KeyUp事件都有兩個參數(shù),即 KeyCode和Shift,例如: Private Sub Form_ KeyDown(KeyCode As Integer,Shift As Integer) End Sub ? 或 Private Sub Form_ KeyUp (KeyCode As Integer,Shift As Integer) End Sub ? 兩個參數(shù)的含義如下: ? 1. KeyCode ? 它是按鍵對應(yīng)的掃描碼。該碼以 “ 鍵 ” 為準(zhǔn),而不是以 “ 字符 ”為準(zhǔn)。 ? 2. Shift ? 轉(zhuǎn)換鍵。它指的是 3個轉(zhuǎn)換鍵的狀態(tài),包括 Shift、 Ctrl和 Alt,這 3個鍵分別以二進(jìn)制形式表示,每個鍵有 3位,即 Shift鍵為 001,Ctrl鍵為 010, Alt鍵為 100 KeyDown和 KeyUp事件 ? 例 編寫一個程序,但按下鍵盤上的某個鍵時,輸出該鍵的 KeyCode碼 ? 在實(shí)際應(yīng)用中, KeyCode碼有著重要的作用,利用它可以根據(jù)按下的鍵采取相應(yīng)的操作。這個程序用來輸出每個鍵的 KeyCode碼。 ? 程序如下: Private Sub Form_ KeyDown(KeyCode As Integer,Shift As Integer) Static i i = i +1 If i Mod 10 = 0 Then Print Chr$(KeyCode)。Hex$(KeyCode)。 。 Print: Print ElseIf KeyCode = 13 Then i=0 Print: Print: Print Else Print Chr$(KeyCode)。Hex$(KeyCode)。 。 End If End Sub 鼠標(biāo)事件 ? 為了實(shí)現(xiàn)鼠標(biāo)操作, Visual Basic提供了 3個過程模板。 ( 1)壓下鼠標(biāo)鍵事件過程 Sub Form_MouseDown(Button As Integer, Shift As Integer,_ x As Single, y As Single) End Sub ( 2)松開鼠標(biāo)事件過程 Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) End Sub ( 3)移動鼠標(biāo)光標(biāo)事件過程 Sub Form_MouseMove(Botton As Integer,Shift As Integer,x As Single,y As Single) End Sub 鼠標(biāo)事件 ? 3個鼠標(biāo)事件過程具有相同的參數(shù),含義如下: ? ( 1) Button:被按下的鼠標(biāo)鍵,可以取 3個值 ? ( 2) Shift:表示 Shift、 Ctrl 和 Alt的狀態(tài)。 ? ( 3) x、 y:鼠標(biāo)光標(biāo)的當(dāng)前位置。 鼠標(biāo)位置 ? 鼠標(biāo)位置由參數(shù) x、 y確定。這里的 x、 y隨鼠標(biāo)光標(biāo)在窗體上的移動而變化。當(dāng)移到某個位置時,如果壓下鍵,則產(chǎn)生MouseDown事件;如果松開鍵,則產(chǎn)生MouseUp事件。( x、 y)通常指接收鼠標(biāo)事件的窗體或控件上的坐標(biāo) 鼠標(biāo)位置 ? 例 用鼠標(biāo)事件在窗體上畫圖。 ? 首先在窗體層定義如下變量: Dim PaintOrNot As Boolean ? 編寫如下事件過程: Sub Form_MouseDown(Botton As Integer, Shift As Integer,_X As Single, Y As Single) PaintOrNot = True 39。 允許畫圖 End Sub Sub Form_MouseDown(Botton As Integer, Shift As Integer,_X As Single, Y As Single) PaintOrNot = False 39。 禁止畫圖 End Sub Sub Form_MouseDown(Botton As Integer, Shift As Integer,_X As Single, Y As Single) If PaintOrNot Then PSet(100,100),RGB(0,255,255) 39。 畫一個亮藍(lán)色的點(diǎn) End Sub Sub Form_Load() Const PI = Circle(3500,1500,RGB(0,255,255),PI/2,PI/3) End Sub Private Sub Form_DblClick() Cls End Sub 鼠標(biāo)鍵 ? 鼠標(biāo)鍵狀態(tài)由參數(shù) Button來設(shè)定,該參數(shù)是一個整數(shù)( 16位)。在設(shè)置按鍵狀態(tài)時,實(shí)際上只使用了低 3位(。其中最低位表示左鍵,右鍵第二位表示右鍵,第三位表示中間鍵。當(dāng)按下某個鍵時,相應(yīng)的位被置 1,否則為 0。 鼠標(biāo)鍵 ? ( 1)對于 MouseDown和 MouseUp事件來說,只能用鼠標(biāo)的按鍵參數(shù)判斷是否按下或松開某一個鍵,不能檢查兩個鍵被同時按下或松開,因此 Button參數(shù)的取值只有 3種,即 001(十進(jìn)制 1)、 010(十進(jìn)制 2)和 100(十進(jìn)制 4)。 ? ( 2)對于 MouseMove事件來說,可以通過 Button參數(shù)判斷按下一個或同時按下兩個、三個鍵。 ? ( 3)在判斷是否按下多個鍵時,要注意避免二義性 ? ( 4)為了提高可讀性,可以把 3個鍵定義為符號常量: Const LEFT_BUTTON = 1 Const RIGHT_BUTTON = 2 Const MIDDLE_BUTTON = 4 轉(zhuǎn)換參數(shù)( Shift) ? 和按鈕參數(shù) Button 一樣,轉(zhuǎn)換參數(shù) Shift也是一個整數(shù)值,并用其低3位表示Shife、 Ctrl和 Alt鍵的狀態(tài),某鍵被按下使得一個二進(jìn)制位被設(shè)置。 轉(zhuǎn)換參數(shù)( Shift) ? 例 Shift參數(shù)和 Button參數(shù)測試程序。 Private Sub Form_MouseDown(Button As Integer,Shift As Integer,_ X As Single,Y As Single) If Shift = 1 And Button = 1 Then Print 按下了 Shift + 左鍵 End If If Shift = 2 And Button = 2 Then Print 按下了 Ctrl + 右鍵 End If If Shift = 4 And Butto = 1 Then Print 按下了 Alt + 左鍵 End If If Shift = 3 And Button = 2 Then Print 按下了 Ctrl + Shift + 右鍵 End If If Shift = 5 And Button = 1 Then Print 按下了 Shift + Alt + 左鍵 End If If Shift = 6 And Button = 2 Then Print 按下了 Alt + Ctrl + 右鍵 End If If Shift = 7 And Button = 1 Then Print 按下了 Alt + Ctrl + Shift + 左鍵 End If End Sub 鼠標(biāo)光標(biāo)的形狀 ? 在使用 Windows及其應(yīng)用程序時,讀者可能已經(jīng)注意到,當(dāng)鼠標(biāo)光標(biāo)位于不同的窗口內(nèi)時,其形狀是不一樣的。有時候呈箭頭狀,有時候是十字,有時候是豎線,等等。在 VisualBasic中,可以通過屬性設(shè)置來改變鼠標(biāo)光標(biāo)的形狀。 MousePointer屬性 ? 鼠標(biāo)光標(biāo)的形狀通過 MousePointer屬性來設(shè)置。該屬性可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。 MousePointer屬性 ? MousePointer的屬性是一個整數(shù),可以取 0~15,其含義見表 設(shè)置鼠標(biāo)光標(biāo)形狀 ? 1.在程序代碼中設(shè)置 MousePointer屬性 ? 程序代碼中設(shè)置 MousePointer屬性的一般格式為: 對象 .MousePointer = 設(shè)置值 ? 這里的 “ 對象 ” 可以是復(fù)選框、組合框、命令按鈕、目錄