第9章 VB繪圖_第1頁
第9章 VB繪圖_第2頁
第9章 VB繪圖_第3頁
第9章 VB繪圖_第4頁
第9章 VB繪圖_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第九章第九章 VBVB繪圖繪圖 本章內(nèi)容本章內(nèi)容 9.1 坐標(biāo)系和長(zhǎng)度單位坐標(biāo)系和長(zhǎng)度單位 9.2 繪圖方法繪圖方法 9.3 與繪圖有關(guān)的控件與繪圖有關(guān)的控件 9.4 鍵盤事件鍵盤事件 9.5 鼠標(biāo)事件鼠標(biāo)事件 9.6 對(duì)象拖放對(duì)象拖放 9.1 9.1 坐標(biāo)系和長(zhǎng)度單位坐標(biāo)系和長(zhǎng)度單位 9.1.1 長(zhǎng)度單位長(zhǎng)度單位 9.1.2 坐標(biāo)系坐標(biāo)系 9.1.1 長(zhǎng)度單位長(zhǎng)度單位 在在VB中,坐標(biāo)系缺省的長(zhǎng)度單位是中,坐標(biāo)系缺省的長(zhǎng)度單位是twip 1英寸約等于英寸約等于1440twip,1厘米約等于厘米約等于567twip。 長(zhǎng)度單位的設(shè)置:長(zhǎng)度單位的設(shè)置:Scalemode屬性屬性 如:如: Sca

2、lemode=4 窗體坐標(biāo)系統(tǒng)以字符為長(zhǎng)度單位窗體坐標(biāo)系統(tǒng)以字符為長(zhǎng)度單位 Picture1.scalemode=6 圖片框坐標(biāo)系統(tǒng)以毫米為長(zhǎng)度單位圖片框坐標(biāo)系統(tǒng)以毫米為長(zhǎng)度單位 Scalemode的各種取值:的各種取值: 0-user 用戶自定義用戶自定義 1-twip 缺省單位,缺省單位,1twip=1/1440英寸英寸 2-Point 1Point=1/72英寸英寸 3-Pixel 象素象素 4-Character 字符字符 5-Inch 英寸英寸 6-Milimeter 毫米毫米 7-Centimeter 厘米厘米 9.1.2 坐標(biāo)系坐標(biāo)系 坐標(biāo)系統(tǒng)用來定位元素在屏幕、窗體、圖片框或坐

3、標(biāo)系統(tǒng)用來定位元素在屏幕、窗體、圖片框或PrinterPrinter 對(duì)象中的位置。對(duì)象中的位置。 1. 窗體的缺省坐標(biāo)系窗體的缺省坐標(biāo)系 構(gòu)成一個(gè)坐標(biāo)系需要三個(gè)要素:坐標(biāo)原點(diǎn)、坐標(biāo)構(gòu)成一個(gè)坐標(biāo)系需要三個(gè)要素:坐標(biāo)原點(diǎn)、坐標(biāo) 軸度量單位、坐標(biāo)軸方向。軸度量單位、坐標(biāo)軸方向。 VB坐標(biāo)系統(tǒng)的缺省坐標(biāo)原點(diǎn)(坐標(biāo)系統(tǒng)的缺省坐標(biāo)原點(diǎn)(0,0)在對(duì)象的左)在對(duì)象的左 上角,上角,X軸向右為正方向,軸向右為正方向,Y軸向下為正方向。軸向下為正方向。 (0,00,0) x y 窗體坐標(biāo)系的屬性:窗體坐標(biāo)系的屬性: ScaleTop, ScaleLeft:窗體容器的左上角的坐標(biāo):窗體容器的左上角的坐標(biāo) Sca

4、leWidth, ScaleHeight:標(biāo)尺寬度和標(biāo)尺高度,即:標(biāo)尺寬度和標(biāo)尺高度,即 除去標(biāo)題欄和邊框后的實(shí)際大小(內(nèi)部大?。3?biāo)題欄和邊框后的實(shí)際大?。▋?nèi)部大?。?。 窗體的另外四個(gè)屬性:窗體的另外四個(gè)屬性: Top, Left:窗體在屏幕標(biāo)準(zhǔn)坐標(biāo)系上的位置:窗體在屏幕標(biāo)準(zhǔn)坐標(biāo)系上的位置 Width, Height:窗體的實(shí)際大?。ㄍ鈬笮。捍绑w的實(shí)際大?。ㄍ鈬笮。?2. 控件在窗體上的坐標(biāo)控件在窗體上的坐標(biāo) 窗體是控件的容器,控件在窗體上的坐標(biāo)是用其窗體是控件的容器,控件在窗體上的坐標(biāo)是用其 Top和和Left屬性定義的。屬性定義的。 Width, Height屬性表示寬度和高度

5、,它決定了控屬性表示寬度和高度,它決定了控 件的大小。件的大小。 3. 其它控件容器的坐標(biāo)系其它控件容器的坐標(biāo)系 除窗體外,圖片框(除窗體外,圖片框(PictureBox)等控件也可以等控件也可以 作為其它控件的容器使用,也具有坐標(biāo)系定義。作為其它控件的容器使用,也具有坐標(biāo)系定義。 4. Scaletop, Scaleleft等與等與Top,Left的區(qū)別的區(qū)別 (1)窗體的)窗體的Top,Left,Width,Height屬性的單位永遠(yuǎn)是屬性的單位永遠(yuǎn)是Twip,而而 ScaleTop,ScaleLeft等屬性可以通過等屬性可以通過ScaleMode屬性任意改屬性任意改 變單位。變單位。 (

6、2)窗體的)窗體的Top,Left,Width,Height屬性是相對(duì)屏幕坐標(biāo)而言屬性是相對(duì)屏幕坐標(biāo)而言 的,而的,而ScaleTop,ScaleLeft,ScaleWidth,ScaleHeight則則 定義了窗體自己的坐標(biāo)系統(tǒng),窗體上的所有控件將以此為定義了窗體自己的坐標(biāo)系統(tǒng),窗體上的所有控件將以此為 坐標(biāo)基礎(chǔ)。坐標(biāo)基礎(chǔ)。 (3) ScaleWidth,ScaleHeight是指對(duì)象的內(nèi)部尺寸,不包是指對(duì)象的內(nèi)部尺寸,不包 括邊框厚度以及菜單或標(biāo)題等高度。而窗體的尺寸則由括邊框厚度以及菜單或標(biāo)題等高度。而窗體的尺寸則由 Width和和Height屬性決定。屬性決定。 5. 當(dāng)前坐標(biāo)當(dāng)前坐標(biāo)

7、 當(dāng)在窗體等容器繪制圖形或輸出結(jié)果時(shí),經(jīng)常要當(dāng)在窗體等容器繪制圖形或輸出結(jié)果時(shí),經(jīng)常要 將它們定位在某一希望的位置,這時(shí)就必須獲得將它們定位在某一希望的位置,這時(shí)就必須獲得 某一點(diǎn)的坐標(biāo),即當(dāng)前坐標(biāo)。某一點(diǎn)的坐標(biāo),即當(dāng)前坐標(biāo)。 CurrentX:設(shè)置:設(shè)置/返回當(dāng)前坐標(biāo)的水平坐標(biāo)返回當(dāng)前坐標(biāo)的水平坐標(biāo) CurrentY:設(shè)置:設(shè)置/返回當(dāng)前坐標(biāo)的垂直坐標(biāo)返回當(dāng)前坐標(biāo)的垂直坐標(biāo) 例如,在點(diǎn)(例如,在點(diǎn)(13,2)處打?。┨幋蛴 癤”: CurrentX=13:CurrentY=2:Print:”X” 6.6.改變坐標(biāo)系改變坐標(biāo)系 改變對(duì)象(如窗體)坐標(biāo)系的方法:改變對(duì)象(如窗體)坐標(biāo)系的方法:

8、對(duì)象名對(duì)象名.Scale (x1,y1)-(x2,y2) 其中其中(x1,y1)是窗體左上角的坐標(biāo),是窗體左上角的坐標(biāo),(x2,y2)是窗體右下角是窗體右下角 的坐標(biāo)。的坐標(biāo)。 說明:說明: (1)如果)如果x1x2則則x軸水平向左軸水平向左 (3)如果)如果y1y2則則y軸垂直向上軸垂直向上 (5)x1=Scaleleft;y1=ScaleTop; x2=Scaleleft+Scalewidth;y2=Scaletop+Scaleheight 例如:例如: Scale(0,0)-(4800,3600) 原點(diǎn)在左上角,原點(diǎn)在左上角,x軸向右,軸向右,y軸向下軸向下 Scale(0,3600)-

9、(4800,0) 原點(diǎn)在左下角,原點(diǎn)在左下角,x軸向右,軸向右,y軸向上軸向上 Scale(-2400,1800)-(2400,-1800) 原點(diǎn)在窗體對(duì)稱中心,原點(diǎn)在窗體對(duì)稱中心,x軸向右,軸向右,y軸向上軸向上 Scale 設(shè)置為默認(rèn)坐標(biāo)系設(shè)置為默認(rèn)坐標(biāo)系 Private Sub Form_Click() Scale (-2400, -1800)-(2400, 1800) CurrentX = ScaleLeft CurrentY = ScaleTop Print ScaleLeft & , & ScaleTop CurrentX = 0 CurrentY = 0 Print hello

10、End Sub 例:改變坐標(biāo)系,通過例:改變坐標(biāo)系,通過 Print查看點(diǎn)查看點(diǎn) (ScaleLeft,ScaleTop) 的位置和原點(diǎn)的位置和原點(diǎn)(0,0)的位的位 置,理解坐標(biāo)的設(shè)置置,理解坐標(biāo)的設(shè)置 9.2 繪圖方法繪圖方法 9.2.1 畫點(diǎn)畫點(diǎn)Pset 9.2.2 畫直線或矩形畫直線或矩形 9.2.3 畫圓、橢圓、圓弧畫圓、橢圓、圓弧 9.2.4 設(shè)置圖形屬性設(shè)置圖形屬性 9.2.1 畫點(diǎn)畫點(diǎn)Pset 語句格式:語句格式: 對(duì)象名對(duì)象名.Pset step(x,y),顏色顏色 省略對(duì)象名,則默認(rèn)對(duì)象是窗體。省略對(duì)象名,則默認(rèn)對(duì)象是窗體。 省略省略step則表示則表示(x,y)是絕對(duì)坐標(biāo)

11、,否則表示相對(duì)是絕對(duì)坐標(biāo),否則表示相對(duì) 于上次畫點(diǎn)的相對(duì)坐標(biāo)。于上次畫點(diǎn)的相對(duì)坐標(biāo)。 省略顏色參數(shù),則以當(dāng)前的前景色顯示。省略顏色參數(shù),則以當(dāng)前的前景色顯示。 9.2.2 畫直線或矩形畫直線或矩形 語句格式:語句格式: 對(duì)象名對(duì)象名.Line step(x1,y1)-step(x2,y2),顏色顏色,BF B表示矩形,表示矩形,F(xiàn)表示用畫矩形的顏色實(shí)心填充,如果沒表示用畫矩形的顏色實(shí)心填充,如果沒 有矩形,填充則無意義,所以有有矩形,填充則無意義,所以有F應(yīng)該有應(yīng)該有B。 BF表示矩形,且用邊框色填充。沒有表示矩形,且用邊框色填充。沒有F則表示空心矩形,則表示空心矩形, 沒有沒有BF則表示以則

12、表示以(x1,y1)-(x2,y2)為端點(diǎn)的直線段。為端點(diǎn)的直線段。 省略省略step表示表示(x,y)是絕對(duì)坐標(biāo)。是絕對(duì)坐標(biāo)。 顏色表示直線或矩形邊框的顏色,如果省略則為前景色。顏色表示直線或矩形邊框的顏色,如果省略則為前景色。 例如:例如: Line(10,20)-(80,100) Line(500,400)-(1300,100),vbred,BF 畫一個(gè)紅色邊框,以紅色填充內(nèi)部的矩形畫一個(gè)紅色邊框,以紅色填充內(nèi)部的矩形 Forecolor=vbblue Line(500,400)-(1300,100),BF 畫一個(gè)藍(lán)色邊框,以藍(lán)色填充內(nèi)部的矩形畫一個(gè)藍(lán)色邊框,以藍(lán)色填充內(nèi)部的矩形 9.2

13、.3 畫圓、橢圓、圓弧畫圓、橢圓、圓弧 畫圓:畫圓: 對(duì)象名對(duì)象名.Circle step(x,y),半徑半徑,顏色顏色 其中,其中,(x,y)是圓心坐標(biāo),顏色為圓周顏色,要填充則需設(shè)是圓心坐標(biāo),顏色為圓周顏色,要填充則需設(shè) 置對(duì)象的置對(duì)象的Fillstyle和和Fillcolor屬性。屬性。 畫橢圓:畫橢圓: 對(duì)象名對(duì)象名.Circle step(x,y),半徑半徑,顏色顏色,縱橫比縱橫比 畫圓弧:畫圓?。?對(duì)象名對(duì)象名.Circle step(x,y),半徑半徑,顏色顏色,起始角起始角,終止角終止角 起始角和終止角以弧度為單位,而且依逆時(shí)針方向。起始角和終止角以弧度為單位,而且依逆時(shí)針方向

14、。 例:畫圖例:畫圖 ForeColor = vbBlue Line (10, 200)-(1000, 200) Line (500, 400)-(1300, 1000), vbRed, BF 矩形矩形 pi = 4 * Atn(1) Atn()為反正切函數(shù),為反正切函數(shù),Atn(1)等于等于 Circle (800, 1500), 400, vbBlue 圓圓 Circle (800, 2500), 600, vbBlue, , , 0.3 橢圓,橫縱比為橢圓,橫縱比為0.3 Circle (2000, 1500), 400, , 0, pi / 2 圓弧圓弧 Circle (3000, 1

15、500), 400, , 0, -pi / 2 圓弧,負(fù)角能將半徑畫出圓弧,負(fù)角能將半徑畫出 Circle (4000, 1500), 400, , -pi / 2, -pi 9.2.4 設(shè)置圖形屬性設(shè)置圖形屬性 1.DrawWidth:設(shè)置點(diǎn)、直線、矩形邊框等的粗細(xì),格式為:設(shè)置點(diǎn)、直線、矩形邊框等的粗細(xì),格式為: 對(duì)象名對(duì)象名.Drawwidth=值(值(037767的整數(shù))的整數(shù)) 2.DrawStyle:用于指定畫線的格式,格式為:用于指定畫線的格式,格式為: 對(duì)象名對(duì)象名.Drawstyle=值值 0 實(shí)線,默認(rèn)值實(shí)線,默認(rèn)值 1 虛線虛線 2 點(diǎn)線點(diǎn)線 3 點(diǎn)劃線點(diǎn)劃線 4 雙點(diǎn)劃

16、線雙點(diǎn)劃線 5 透明線透明線 6 內(nèi)收實(shí)線內(nèi)收實(shí)線 此屬性只有此屬性只有Drawwidth=1時(shí)起作用,否則相當(dāng)于時(shí)起作用,否則相當(dāng)于 Drawstyle=0,只畫實(shí)線。,只畫實(shí)線。 3.FillStyle 用于設(shè)定填充圖案,格式:用于設(shè)定填充圖案,格式: 對(duì)象名對(duì)象名.FillStyle=值值 0 全部填充全部填充 1 透明,默認(rèn)值透明,默認(rèn)值 2 水平直線水平直線 3 垂直直線垂直直線 4 上斜對(duì)角線上斜對(duì)角線 5 下斜對(duì)角線下斜對(duì)角線 6 十字線十字線 7 交叉對(duì)角線交叉對(duì)角線 4.FillColor:填充色:填充色 實(shí)例實(shí)例9-19-1:驗(yàn)證繪圖屬性:驗(yàn)證繪圖屬性 本例演示本例演示Fo

17、recolor、 Drawwidth、 Drawstyle、Fillstyle、 Fillcolor等繪圖屬性等繪圖屬性 在繪圖方法中的作用。在繪圖方法中的作用。 實(shí)例實(shí)例9-29-2:CircleCircle用法用法 本例說明本例說明Circle方法的用法,方法的用法, 撥動(dòng)滑塊可以觀察橫縱比撥動(dòng)滑塊可以觀察橫縱比 的作用及起始角度、結(jié)束的作用及起始角度、結(jié)束 角度為正負(fù)值時(shí)畫弧和扇角度為正負(fù)值時(shí)畫弧和扇 形的不同。形的不同。 實(shí)例實(shí)例9-39-3:橡皮擦:橡皮擦 本例給出一個(gè)橡皮擦程序,此程序可用在本例給出一個(gè)橡皮擦程序,此程序可用在“畫畫 圖圖”程序中作為一種擦除工具。程序中作為一種擦除

18、工具。 9.3 9.3 與繪圖有關(guān)的控件與繪圖有關(guān)的控件 9.3.1 直線控件直線控件 9.3.2 形狀控件形狀控件 9.3.3 直線、形狀控件與繪圖方法的區(qū)別直線、形狀控件與繪圖方法的區(qū)別 9.3.1 直線控件直線控件Line 直線控件用于顯示一條線段,此線段可以顯示在窗體、直線控件用于顯示一條線段,此線段可以顯示在窗體、 圖片框、框架等容器內(nèi)。圖片框、框架等容器內(nèi)。 直線控件不具有事件直線控件不具有事件 直線控件的常用屬性:直線控件的常用屬性: bordercolor:劃線的顏色:劃線的顏色 borderstyle:劃線的風(fēng)格劃線的風(fēng)格 borderwidth:劃線的寬度:劃線的寬度 x1

19、,y1:控件一端的:控件一端的x,y坐標(biāo)坐標(biāo) x2,y2:控件另一端的:控件另一端的x,y坐標(biāo)坐標(biāo) 9.3.2 形狀控件形狀控件Shape 形狀控件用于顯示矩形、圓角矩形、正方形、圓角正方形狀控件用于顯示矩形、圓角矩形、正方形、圓角正方 形、圓、橢圓。形、圓、橢圓。 可以在窗體、圖片框、框架等容器內(nèi)使用形狀控件??梢栽诖绑w、圖片框、框架等容器內(nèi)使用形狀控件。 形狀控件的常用屬性:形狀控件的常用屬性: (1)backcolor:背景色:背景色 (2)Backstyle:背景風(fēng)格,:背景風(fēng)格,0 透明;透明;1 不透明不透明 (3)bordercolor:劃線的顏色:劃線的顏色 (4)border

20、style:劃線的風(fēng)格劃線的風(fēng)格 (5)borderwidth:劃線的寬度:劃線的寬度 (6)Fillcolor:填充色:填充色 (7)Fillstyle:填充風(fēng)格:填充風(fēng)格 (8)Shape:指定控件的外觀,取值為:指定控件的外觀,取值為: 0 矩形,默認(rèn)值矩形,默認(rèn)值 1 正方形正方形 2 橢圓橢圓 3 圓圓 4 圓角矩形圓角矩形 5 圓角正方形圓角正方形 9.3.3 直線、形狀控件與繪圖方法的區(qū)別直線、形狀控件與繪圖方法的區(qū)別 (1)(1)直線控件和形狀控件表示的圖形比繪圖方法繪直線控件和形狀控件表示的圖形比繪圖方法繪 制的圖形層次更高,繪圖方法繪制的圖形可能會(huì)制的圖形層次更高,繪圖方法

21、繪制的圖形可能會(huì) 被控件覆蓋,而直線控件和形狀控件則不會(huì)。被控件覆蓋,而直線控件和形狀控件則不會(huì)。 (2)(2)繪圖方法繪制的圖形能夠被繪圖方法繪制的圖形能夠被ClsCls方法清除,而方法清除,而 直線控件和形狀控件則不會(huì)。直線控件和形狀控件則不會(huì)。 (3)(3)直線控件和形狀控件能夠被移動(dòng)、拖動(dòng)、隱藏,直線控件和形狀控件能夠被移動(dòng)、拖動(dòng)、隱藏, 但繪圖方法繪制的圖形不能但繪圖方法繪制的圖形不能 P171:案例:案例1電眼電眼 運(yùn)行效果運(yùn)行效果 P175:案例:案例2繪圖板繪圖板 運(yùn)行效果運(yùn)行效果 9.4 9.4 鍵盤事件鍵盤事件 常用的與鍵盤有關(guān)的事件常用的與鍵盤有關(guān)的事件: KeyDown

22、事件:事件:按鍵按下時(shí)觸發(fā)按鍵按下時(shí)觸發(fā) KeyPress事件:事件:按鍵按下時(shí)觸發(fā)按鍵按下時(shí)觸發(fā) KeyUp事件事件 :按鍵松開時(shí)觸發(fā)按鍵松開時(shí)觸發(fā) u按鍵按下時(shí)先觸發(fā)按鍵按下時(shí)先觸發(fā)KeyDown事件,后觸發(fā)事件,后觸發(fā) KeyPress事件事件 uKeyUp事件觸發(fā)在事件觸發(fā)在KeyPress事件之后事件之后 KeyPress事件中得到的是按鍵對(duì)應(yīng)的字符事件中得到的是按鍵對(duì)應(yīng)的字符 的的ASCII碼碼(KeyAscii) KeyUp,KeyDown事件中得到的是按鍵對(duì)應(yīng)事件中得到的是按鍵對(duì)應(yīng) 的鍵號(hào)的鍵號(hào)(KeyCode),鍵盤,鍵盤104個(gè)鍵都對(duì)應(yīng)著個(gè)鍵都對(duì)應(yīng)著 唯一的鍵號(hào)。唯一的鍵號(hào)

23、。 9.4.1 KeyPress事件事件 對(duì)象的對(duì)象的KeyPress事件過程的一般格式:事件過程的一般格式: Privat Sub Object_KeyPress(KeyAscii As Integer) 語句塊語句塊 End Sub 如果對(duì)象是控件數(shù)組中的一個(gè),則如果對(duì)象是控件數(shù)組中的一個(gè),則KeyPress格式變?yōu)椋焊袷阶優(yōu)椋?Private Sub Object_KeyPress(Index As Integer, KeyAscii As Integer) 語句塊語句塊 End Sub Index代表控件數(shù)組中的索引值。代表控件數(shù)組中的索引值。 例如例如 :利用利用KeyPress事件

24、對(duì)鍵盤輸入的值取舍。事件對(duì)鍵盤輸入的值取舍。 程序運(yùn)程序運(yùn) 行后要求輸入大寫字母,如果輸入的是其它字符就響鈴行后要求輸入大寫字母,如果輸入的是其它字符就響鈴 報(bào)警,設(shè)計(jì)界面如下圖:報(bào)警,設(shè)計(jì)界面如下圖: Private Sub TxtUCase_KeyPress(KeyAscii As Integer) If KeyAscii 90 Then Beep KeyAscii = 0 為空操作,不滿足條件的字符在文本框中不回顯為空操作,不滿足條件的字符在文本框中不回顯 End If End Sub Dim PWord As String 口令口令 Dim TryCount As Integer 重輸

25、次數(shù)重輸次數(shù) Private Sub Form_Load() PWord = TryCount = 0 End Sub Private Sub TxtPWD_KeyPress(KeyAscii As Integer) If KeyAscii 13 Then 如果按鍵不是回車鍵如果按鍵不是回車鍵 If Len(TxtPWD.Text)+1 5 Then Beep KeyAscii = 0 Else PWord = PWord & Chr(KeyAscii) KeyAscii = 42 42是是*的的ASCII碼碼 End If 例例9-4:利用:利用KeyPress事件實(shí)現(xiàn)口令的驗(yàn)證事件實(shí)現(xiàn)口令

26、的驗(yàn)證,口令設(shè)定為口令設(shè)定為 “admin”。 Else 如果按鍵是回車鍵如果按鍵是回車鍵 If PWord = “admin Then MsgBox 口令正確,歡迎使用口令正確,歡迎使用!, vbOKOnly, 提示提示 Unload Me Else TryCount = TryCount + 1 If TryCount 3 Then MsgBox 口令錯(cuò)誤,請(qǐng)重新輸入口令錯(cuò)誤,請(qǐng)重新輸入!, vbOKOnly + vbExclamation, 警告警告 TxtPWD.Text = PWord = “” Else MsgBox 錯(cuò)誤口令超過三次,錯(cuò)誤口令超過三次, & vbCrLf & 按按

27、OK退出程序退出程序!, vbOKOnly + vbExclamation, 警告警告 Unload Me End If End If End If End Sub 9.4.2 KeyDown和和KeyUp事件事件 KeyDown和和KeyUp事件中返回的是事件中返回的是KeyCode(鍵號(hào)鍵號(hào)) ,同,同 一個(gè)鍵上的兩個(gè)字符,一個(gè)鍵上的兩個(gè)字符,KeyCode是一樣的,可通過是一樣的,可通過Shift 參數(shù)來確定上檔鍵的狀態(tài)參數(shù)來確定上檔鍵的狀態(tài) 。 對(duì)象的對(duì)象的KeyDown和和KeyUp事件過程的一般格式為:事件過程的一般格式為: Private Sub Object_KeyDown(K

28、eyCode As Integer, Shift As Integer) 語句塊語句塊 End Sub Private Sub Object_KeyUp(KeyCode As Integer, Shift As Integer) 語句塊語句塊 End Sub 如果對(duì)象為控件數(shù)組時(shí),還會(huì)有一個(gè)參數(shù)如果對(duì)象為控件數(shù)組時(shí),還會(huì)有一個(gè)參數(shù)(Index), 代表控件數(shù)組中的代表控件數(shù)組中的 索引值。索引值。 說明:說明: 參數(shù)參數(shù)KeyCode是按鍵的鍵號(hào),大、小寫字母的鍵號(hào)相同,是按鍵的鍵號(hào),大、小寫字母的鍵號(hào)相同, 為大寫字母的為大寫字母的ASCII碼值碼值 不能顯示的功能鍵和轉(zhuǎn)換鍵盤,則只會(huì)觸發(fā)不

29、能顯示的功能鍵和轉(zhuǎn)換鍵盤,則只會(huì)觸發(fā)KeyDown事事 件,不會(huì)觸發(fā)件,不會(huì)觸發(fā)KeyPress事件事件 Shift是三個(gè)轉(zhuǎn)換鍵的狀態(tài),包括是三個(gè)轉(zhuǎn)換鍵的狀態(tài),包括Alt 、Ctrl 和和Shift,這三,這三 個(gè)轉(zhuǎn)換鍵可以只按下任意一個(gè),也可以同時(shí)按下任意兩個(gè)轉(zhuǎn)換鍵可以只按下任意一個(gè),也可以同時(shí)按下任意兩 個(gè),還可以三個(gè)同時(shí)全都按下,這樣就可以出現(xiàn)個(gè),還可以三個(gè)同時(shí)全都按下,這樣就可以出現(xiàn)8種狀態(tài)種狀態(tài) 。 Shift參數(shù)值參數(shù)值 十進(jìn)制數(shù)十進(jìn)制數(shù) 二進(jìn)制數(shù)二進(jìn)制數(shù) 轉(zhuǎn)換鍵狀態(tài)轉(zhuǎn)換鍵狀態(tài) 0000沒有按下轉(zhuǎn)換鍵沒有按下轉(zhuǎn)換鍵 1001只按下只按下Shift鍵鍵 2010只按下只按下Ctrl鍵

30、鍵 4100只按下只按下Alt鍵鍵 3011同時(shí)按下同時(shí)按下Shift和和Ctrl鍵鍵 5101同時(shí)按下同時(shí)按下Shift和和Alt鍵鍵 6110同時(shí)按下同時(shí)按下Ctrl和和Alt鍵鍵 7111三個(gè)轉(zhuǎn)換鍵全都按下三個(gè)轉(zhuǎn)換鍵全都按下 注意同時(shí)按下多個(gè)時(shí)注意同時(shí)按下多個(gè)時(shí)shift的值是按下單個(gè)值的相加的值是按下單個(gè)值的相加 說明: 大部分的按鍵在大部分的按鍵在VB中都定義了中都定義了常量常量,例如,例如F1鍵的常量鍵的常量 是是vbKeyF1,Tab鍵的常量是鍵的常量是vbKeyTab,Home鍵的常量鍵的常量 vbKeyHome。這些常量可以代替。這些常量可以代替keycode的值在程序中直的

31、值在程序中直 接使用接使用 例例9-5:獲得鍵號(hào)值的小程序:獲得鍵號(hào)值的小程序 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Label1.Caption = Label1.Caption & vbCrLf & 按鍵的按鍵的KeyCode= & Str(KeyCode) End Sub Private Sub Form_KeyPress(KeyAscii As Integer) Label1.Caption = Label1.Caption & KeyPress= & Str(KeyAscii) & 字符:字符:

32、& Chr(KeyAscii) End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF1: TxtShow.Text = TxtShow.Text & vbCrLf & 按下按下 & ShiftStatus(Shift) & 功能鍵功能鍵F1” . TxtShow.Text = TxtShow.Text & vbCrLf & 按下按下 & ShiftStatus(Shift) & 功能鍵功能鍵F6 Case vbKeyHome: TxtShow.

33、Text = TxtShow.Text & vbCrLf & 按下按下 & ShiftStatus(Shift) & 功能鍵功能鍵Home Case vbKeyPageUp: TxtShow.Text = TxtShow.Text & vbCrLf & 按下按下 & ShiftStatus(Shift) & 功能鍵功能鍵PageUp End Select End Sub 例例9-6:演示:演示KeyDown事件及事件及Shift參數(shù)的作用。參數(shù)的作用。 Function ShiftStatus(Shift As Integer) As String Select Case Shift Case

34、 0: s = Case 1: s = “Shift+ Case 2: s = Ctrl+ Case 3: s = Shift+Ctrl+ Case 4: s = Alt+ Case 5: s = Shift+Alt+ Case 6: s = Ctrl+Alt+ Case 7: s = Shift+Ctrl+Alt+ End Select ShiftStatus = s End Function 注意 (1 1)只有獲得焦點(diǎn)的對(duì)象才能接受鍵盤事件。不活動(dòng)的窗)只有獲得焦點(diǎn)的對(duì)象才能接受鍵盤事件。不活動(dòng)的窗 體沒有焦點(diǎn);活動(dòng)的窗體上面,同一時(shí)刻只能有一個(gè)焦體沒有焦點(diǎn);活動(dòng)的窗體上面,同一時(shí)刻只能

35、有一個(gè)焦 點(diǎn),有虛框的按鈕獲得焦點(diǎn),光標(biāo)所在處獲得焦點(diǎn),按點(diǎn),有虛框的按鈕獲得焦點(diǎn),光標(biāo)所在處獲得焦點(diǎn),按 TabTab鍵移動(dòng)焦點(diǎn)。鍵移動(dòng)焦點(diǎn)。 (2 2)默認(rèn)情況下,窗體上)默認(rèn)情況下,窗體上控件的控件的鍵盤事件優(yōu)先于窗體的鍵鍵盤事件優(yōu)先于窗體的鍵 盤事件。如果希望窗體先接收鍵盤事件,則必須把窗體盤事件。如果希望窗體先接收鍵盤事件,則必須把窗體 的的KeyPreviewKeyPreview屬性設(shè)置為屬性設(shè)置為TrueTrue,否則不能激活窗體的鍵,否則不能激活窗體的鍵 盤事件。盤事件。 例:方向鍵控制圖片的移動(dòng) Private Sub Form_KeyDown(KeyCode As Inte

36、ger, Shift As Integer) Select Case KeyCode Case vbKeyUp Image1.Top = Image1.Top - 50 Case vbKeyDown Image1.Top = Image1.Top + 50 Case vbKeyLeft Image1.Left = Image1.Left - 50 Case vbKeyRight Image1.Left = Image1.Left + 50 End Select End Sub 9.5 鼠標(biāo)事件 當(dāng)移動(dòng)鼠標(biāo)和按鼠標(biāo)鍵時(shí)就會(huì)產(chǎn)生一些與鼠標(biāo)有當(dāng)移動(dòng)鼠標(biāo)和按鼠標(biāo)鍵時(shí)就會(huì)產(chǎn)生一些與鼠標(biāo)有 關(guān)的事件。關(guān)的

37、事件。 9.5.1 鼠標(biāo)事件類型鼠標(biāo)事件類型 單擊單擊(Click)和雙擊和雙擊(DblClidk)事件事件 鼠標(biāo)鍵按下鼠標(biāo)鍵按下(MouseDown)事件和松開鼠標(biāo)鍵事件和松開鼠標(biāo)鍵 (MouseUp)事件事件 移動(dòng)鼠標(biāo)事件移動(dòng)鼠標(biāo)事件(MouseMove) MouseDown和和MouseUP事件事件 Private Sub Object_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 語句塊語句塊 End Sub Private Sub Object_MouseUp(Button As In

38、teger, Shift As Integer, X As Single, Y As Single) 語句塊語句塊 End Sub MouseMove事件事件 當(dāng)鼠標(biāo)光標(biāo)從某個(gè)對(duì)象上移過時(shí),觸發(fā)移動(dòng)鼠標(biāo)光標(biāo)當(dāng)鼠標(biāo)光標(biāo)從某個(gè)對(duì)象上移過時(shí),觸發(fā)移動(dòng)鼠標(biāo)光標(biāo) (MouseMove)事件事件 格式為格式為 : Private Sub Object_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 語句塊語句塊 End Sub 對(duì)象為控件數(shù)組時(shí),會(huì)有一個(gè)參數(shù)對(duì)象為控件數(shù)組時(shí),會(huì)有一個(gè)參數(shù)(Index) 各參數(shù)

39、意義:各參數(shù)意義: (1) (1) 鼠標(biāo)鍵鼠標(biāo)鍵(Button)(Button):大部分鼠標(biāo)都是三個(gè)鍵,以前的是兩個(gè):大部分鼠標(biāo)都是三個(gè)鍵,以前的是兩個(gè) 鍵,這樣可出現(xiàn)鍵,這樣可出現(xiàn)8種按鍵狀態(tài)。種按鍵狀態(tài)。 十進(jìn)制數(shù)十進(jìn)制數(shù) 二進(jìn)制數(shù)二進(jìn)制數(shù) 轉(zhuǎn)換鍵狀態(tài)轉(zhuǎn)換鍵狀態(tài) 0000沒有按下轉(zhuǎn)換鍵沒有按下轉(zhuǎn)換鍵 1001只按下鼠標(biāo)左鍵只按下鼠標(biāo)左鍵 2010只按下鼠標(biāo)右鍵只按下鼠標(biāo)右鍵 4100只按下鼠標(biāo)中間鍵只按下鼠標(biāo)中間鍵 3011同時(shí)按下鼠標(biāo)左鍵和鼠標(biāo)右鍵同時(shí)按下鼠標(biāo)左鍵和鼠標(biāo)右鍵 5101同時(shí)按下鼠標(biāo)左鍵和鼠標(biāo)中間鍵同時(shí)按下鼠標(biāo)左鍵和鼠標(biāo)中間鍵 6110同時(shí)按下鼠標(biāo)右鍵和鼠標(biāo)中間鍵同時(shí)按下鼠標(biāo)

40、右鍵和鼠標(biāo)中間鍵 7111三個(gè)轉(zhuǎn)換鍵全都按下三個(gè)轉(zhuǎn)換鍵全都按下 各參數(shù)意義各參數(shù)意義 (2) 轉(zhuǎn)換鍵轉(zhuǎn)換鍵(Shift) 按下、松開鼠標(biāo)鍵和移動(dòng)鼠標(biāo)時(shí)三個(gè)轉(zhuǎn)換鍵按下、松開鼠標(biāo)鍵和移動(dòng)鼠標(biāo)時(shí)三個(gè)轉(zhuǎn)換鍵(Shift,Ctrl,Alt) 的狀態(tài)的狀態(tài) ,三個(gè)轉(zhuǎn)換鍵的狀態(tài)和,三個(gè)轉(zhuǎn)換鍵的狀態(tài)和Shift參數(shù)的值與鍵盤事件參數(shù)的值與鍵盤事件 的完全一樣。的完全一樣。 (3) 鼠標(biāo)位置鼠標(biāo)位置(X和和Y) 鼠標(biāo)指針在接收鼠標(biāo)事件的窗體或控件上的位置坐標(biāo),鼠標(biāo)指針在接收鼠標(biāo)事件的窗體或控件上的位置坐標(biāo), 不需要用戶設(shè)置,隨鼠標(biāo)光標(biāo)的移動(dòng)而變化。不需要用戶設(shè)置,隨鼠標(biāo)光標(biāo)的移動(dòng)而變化。 例:檢測(cè)按下的是鼠標(biāo)哪

41、一個(gè)按鈕例:檢測(cè)按下的是鼠標(biāo)哪一個(gè)按鈕 Private sub Form_MouseDown(button as integer, shift as integer, x as single, y as single) select case button case 1 Msgbox 按下的是左鍵按下的是左鍵 case 2 Msgbox 按下的是右鍵按下的是右鍵 case 4 Msgbox 按下的是中間鍵按下的是中間鍵 End select End sub 例例9-7:圖像隨鼠標(biāo)移動(dòng):圖像隨鼠標(biāo)移動(dòng) 在窗體上創(chuàng)建在窗體上創(chuàng)建1個(gè)個(gè)Image控件用來移動(dòng),控件用來移動(dòng),1個(gè)標(biāo)簽個(gè)標(biāo)簽 用來顯示鼠

42、標(biāo)的坐標(biāo)用來顯示鼠標(biāo)的坐標(biāo) Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Image1.Move X, Y Label1.Caption = 位置:(位置:( & X & , & Y & ) End Sub 1. MousePointer屬性屬性 p功能:設(shè)置鼠標(biāo)光標(biāo)的標(biāo)準(zhǔn)形狀功能:設(shè)置鼠標(biāo)光標(biāo)的標(biāo)準(zhǔn)形狀 p取值范圍:取值范圍:015,99(自定義自定義) p設(shè)置方法:設(shè)置方法: 通過屬性窗口設(shè)置通過屬性窗口設(shè)置 在程序中設(shè)置在程序中設(shè)置Object.Mouse

43、Pointer=n 9.5.2 鼠標(biāo)的光標(biāo)形狀鼠標(biāo)的光標(biāo)形狀 2 . MouseIcon屬性屬性 功能:設(shè)置鼠標(biāo)光標(biāo)的自定義形狀。功能:設(shè)置鼠標(biāo)光標(biāo)的自定義形狀。 (MousePointer=99) 取值方式:取值方式: 通過屬性窗口通過屬性窗口 通過程序代碼通過程序代碼 例:在窗體上顯示所有類型的鼠標(biāo)光標(biāo) Private Sub Form_Click() Static i As Integer form1.MousePointer = i i = i + 1 If i = 16 Then i = 99 If i = 100 Then i = 0 End Sub 9.6 對(duì)象拖放對(duì)象拖放 拖放

44、:在屏幕上用鼠標(biāo)把一個(gè)對(duì)象從一個(gè)位置拖拖放:在屏幕上用鼠標(biāo)把一個(gè)對(duì)象從一個(gè)位置拖 (Dragging)到另一個(gè)位置再放下到另一個(gè)位置再放下(Dropping) 拖放的一般過程:將鼠標(biāo)光標(biāo)移動(dòng)到一個(gè)控件對(duì)象上,拖放的一般過程:將鼠標(biāo)光標(biāo)移動(dòng)到一個(gè)控件對(duì)象上, 按下鼠標(biāo)鍵,然后移動(dòng)鼠標(biāo),對(duì)象隨著鼠標(biāo)的移動(dòng)而在按下鼠標(biāo)鍵,然后移動(dòng)鼠標(biāo),對(duì)象隨著鼠標(biāo)的移動(dòng)而在 屏幕上移動(dòng),松開鼠標(biāo)對(duì)象被放下屏幕上移動(dòng),松開鼠標(biāo)對(duì)象被放下 。 除了除了菜單、計(jì)時(shí)器和通用對(duì)話框菜單、計(jì)時(shí)器和通用對(duì)話框以外,其余的控件均可以外,其余的控件均可 在程序運(yùn)行期間被拖放在程序運(yùn)行期間被拖放 。 1屬性屬性 (1) DragMod

45、e:設(shè)置設(shè)置/返回拖放模式是自動(dòng)的還是手動(dòng)的。返回拖放模式是自動(dòng)的還是手動(dòng)的。 0-Manual拖放模式是手動(dòng)的拖放模式是手動(dòng)的(默認(rèn)默認(rèn)) 1-Automatic拖放模式是自動(dòng)的拖放模式是自動(dòng)的 為了能對(duì)一個(gè)控件執(zhí)行自動(dòng)拖放操作,必須把它的屬性為了能對(duì)一個(gè)控件執(zhí)行自動(dòng)拖放操作,必須把它的屬性 DragMode設(shè)置為設(shè)置為Automatic,即自由地被拖動(dòng)。,即自由地被拖動(dòng)。 注意注意: :設(shè)置為自動(dòng)拖放后,控件將不再響應(yīng)通常的鼠標(biāo)事件設(shè)置為自動(dòng)拖放后,控件將不再響應(yīng)通常的鼠標(biāo)事件 (Click(Click、DblClickDblClick、MouseDownMouseDown、MouseUp

46、)MouseUp) (2) DragIcon:設(shè)置設(shè)置/返回拖放操作中鼠標(biāo)指針的圖標(biāo)。返回拖放操作中鼠標(biāo)指針的圖標(biāo)。 9.6.1 與拖放有關(guān)的屬性、事件和方法與拖放有關(guān)的屬性、事件和方法 2事件事件(DragDrop和和DragOver) (1) DragDrop 當(dāng)把控件當(dāng)把控件(或圖標(biāo)或圖標(biāo))拖到目標(biāo)對(duì)象上之后,如果松開鼠標(biāo)鍵拖到目標(biāo)對(duì)象上之后,如果松開鼠標(biāo)鍵 ,則會(huì)觸發(fā)目標(biāo)對(duì)象的,則會(huì)觸發(fā)目標(biāo)對(duì)象的DragDrop事件。事件。 Private Sub Object_DragDrop(Source As Control, X As Single, Y As Single) 事件處理代碼事件

47、處理代碼 End Sub Source:類型為:類型為Control的對(duì)象變量,用來返回被拖放的對(duì)象的的對(duì)象變量,用來返回被拖放的對(duì)象的 屬性。通過屬性。通過Source的的Name屬性來判斷被拖放的控件的名字,從屬性來判斷被拖放的控件的名字,從 而決定該控件是否允許被放置在目標(biāo)對(duì)象上。還可以在控件或圖而決定該控件是否允許被放置在目標(biāo)對(duì)象上。還可以在控件或圖 標(biāo)被放下后,將它的標(biāo)被放下后,將它的Visible屬性設(shè)置為屬性設(shè)置為False,就象被放置在目,就象被放置在目 標(biāo)對(duì)象的內(nèi)部。標(biāo)對(duì)象的內(nèi)部。 X和和Y:返回松開鼠標(biāo)鍵放下對(duì)象時(shí)鼠標(biāo)光標(biāo)的位置:返回松開鼠標(biāo)鍵放下對(duì)象時(shí)鼠標(biāo)光標(biāo)的位置 。

48、9.6.1 與拖放有關(guān)的屬性、事件和方法與拖放有關(guān)的屬性、事件和方法 (2) DragOver 當(dāng)被拖放的控件當(dāng)被拖放的控件(或圖標(biāo)或圖標(biāo))越過越過某一個(gè)對(duì)象時(shí),會(huì)觸發(fā)該對(duì)某一個(gè)對(duì)象時(shí),會(huì)觸發(fā)該對(duì) 象的象的DragOver事件,類似于控件的事件,類似于控件的MouseMove事件。事件。 Private Sub Object_DragOver(Source As Control, X As Single, Y As Single, State As Integer) 事件處理代碼事件處理代碼 End Sub State參數(shù)表示被拖動(dòng)對(duì)象的狀態(tài),可以取參數(shù)表示被拖動(dòng)對(duì)象的狀態(tài),可以取3個(gè)值個(gè)值:

49、 0-vbEnter 鼠標(biāo)光標(biāo)正在進(jìn)入目標(biāo)對(duì)象的區(qū)域鼠標(biāo)光標(biāo)正在進(jìn)入目標(biāo)對(duì)象的區(qū)域 1-vbLeave鼠標(biāo)光標(biāo)正在離開目標(biāo)對(duì)象的區(qū)域鼠標(biāo)光標(biāo)正在離開目標(biāo)對(duì)象的區(qū)域 2-vbOver鼠標(biāo)光標(biāo)正位于目標(biāo)對(duì)象的區(qū)域之內(nèi)鼠標(biāo)光標(biāo)正位于目標(biāo)對(duì)象的區(qū)域之內(nèi) 9.6.1 與拖放有關(guān)的屬性、事件和方法與拖放有關(guān)的屬性、事件和方法 3方法方法 Move方法方法 Drag方法:用來開始、結(jié)束或取消一個(gè)拖放操作方法:用來開始、結(jié)束或取消一個(gè)拖放操作 Object.Drag DragAction DragAction為一個(gè)整型值,有三個(gè)值可以選擇:為一個(gè)整型值,有三個(gè)值可以選擇: 0-vbCancel 取消進(jìn)行中的任

50、何拖放操作取消進(jìn)行中的任何拖放操作 1-BeginDrag 開始拖放操作開始拖放操作 2-EndDrag 結(jié)束拖放操作并放置對(duì)象結(jié)束拖放操作并放置對(duì)象 9.6.1 與拖放有關(guān)的屬性、事件和方法與拖放有關(guān)的屬性、事件和方法 9.6.2 自動(dòng)拖放自動(dòng)拖放 將對(duì)象的將對(duì)象的DragMode屬性設(shè)置為屬性設(shè)置為1-Automatic,運(yùn)行后,運(yùn)行后, 可用鼠標(biāo)自由地拖動(dòng)對(duì)象。但是鼠標(biāo)鍵松開后,被拖動(dòng)可用鼠標(biāo)自由地拖動(dòng)對(duì)象。但是鼠標(biāo)鍵松開后,被拖動(dòng) 的對(duì)象又回到原來位置。的對(duì)象又回到原來位置。 需要在目標(biāo)對(duì)象的需要在目標(biāo)對(duì)象的DragDrop事件中,利用程序代碼將事件中,利用程序代碼將 被拖動(dòng)的對(duì)象移動(dòng)到目標(biāo)控件中:被拖動(dòng)的對(duì)象移動(dòng)到目標(biāo)控件中: Object.Move X,Y 例例9-8:將三個(gè)按鈕拖入圖片框中,并按順序排列。:將三個(gè)按鈕拖入圖片框中,并按順序排列。 Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) Select Case Source.Name Case Command1: Command1.Move Picture1.Left , Picture1.Top Case Command2: Command2.Move Picture1.L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論