vb第8章 繪圖與鼠標鍵盤事件2H_第1頁
vb第8章 繪圖與鼠標鍵盤事件2H_第2頁
vb第8章 繪圖與鼠標鍵盤事件2H_第3頁
vb第8章 繪圖與鼠標鍵盤事件2H_第4頁
vb第8章 繪圖與鼠標鍵盤事件2H_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VisualBasicProgramming

第八章繪圖與鼠標鍵盤事件聊城大學物理科學與信息工程學院曹銀杰caoyinjie@1第八章繪圖與鼠標鍵盤事件§8.1繪圖§8.2鼠標事件§8.3鍵盤事件作業2§8.1繪圖可以在窗體、PictureBox圖象框、Printer打印機等對象上繪圖。8.1.1屏幕繪圖坐標系統8.1.2顏色8.1.3使用繪圖方法繪圖38.1.1屏幕繪圖坐標系統1、屏幕繪圖坐標系統:每個容器都有一個坐標系,構成一個坐標系,需要三個要素:坐標原點、坐標度量單位、坐標軸的長度與方向。坐標度量單位由容器對象的ScaleMode屬性決定。缺省時為Twip。每英寸1440個Twip,20個Twip為一磅。原點HeightScaleHeight4屏幕繪圖坐標系統2、自定義坐標系統方法一:通過ScaleTop,ScaleLeft,ScaleWidth和ScaleHeight屬性實現。(ScaleTop,ScaleLeft)ScaleHeightScaleWidth5屏幕繪圖坐標系統方法二:使用Scale方法改變坐標系統,語法:[對象.]Scale[(xLeft,yTop)-(xRight,yBotton)](xLeft,yTop)(xRight,yBotton)當Scale無參數時,取消用戶定義坐標系,為缺省坐標系。6屏幕繪圖坐標系統3、屏幕繪圖坐標系統舉例:用Scale、Line方法實現在不同坐標系畫線的效果:

PrivateSubCommand1_Click()Form1.Scale(-200,1200)-(1200,-150)Line(0,0)-(1000,1000)EndSubPrivateSubCommand2_Click()Form1.ScaleLine(0,0)-(1000,1000)EndSub‘缺省坐標系’自定義坐標系統78.1.2顏色計算機領域一般采用RGB顏色模型,是紅R、綠G、藍B三基色混合而成。VB系統可以使用下列五種方法。1、使用RGB函數表示顏色RGB函數返回一個顏色值(長整型),格式RGB(R,G,B)參數RGB的取值為:0~255參數的值,如果超過255,會被當作255。256*256*256=16M種顏色舉例:RGB(0,0,0)——黑色

RGB(255,255,255)——白色

RGB(255,255,0)——黃色舉例:Line(0,0)-(1000,1000),RGB(20,100,255)8顏色2、使用長整數表示顏色Vb中四字節表示,最高字節固定為00,其實RGB函數返回的是一個長整形數。采用十六進制表示:&H00BBGGRRRR/GG/BB對應各顏色分量,取值分別是00~FF。舉例:Line(0,0)-(1000,1000),&HAABBFF3、系統顏色系統顏色是由用戶在Windows控制面板的“顯示器”屬性中設定的各元素界面的顏色。系統顏色值見P232表(共25種)。9顏色4、使用顏色常量直觀、易記。共8種:vbBlack

vbGreen

vbBlue

vbCyan

vbRed

vbYellow

vbMagenta

vbWhite各常量值見P232-233取值表。例:Line(0,0)-(1000,1000),vbRed10VB顏色5、使用QBColor函數QBColor函數選擇16種顏色:取值及其返回的顏色如下表函數效果函數效果QBColor(0)黑色QBColor(8)灰色QBColor(1)藍色QBColor(9)亮藍色QBColor(2)綠色QBColor(10)亮綠色QBColor(3)深青色QBColor(11)亮青色QBColor(4)紅色QBColor(12)亮紅色QBColor(5)品紅色QBColor(13)亮品紅色QBColor(6)深黃色QBColor(14)亮黃色QBColor(7)紙QBColor(15)亮白色例:Line(0,0)-(1000,1000),QBColor(3)118.1.3使用繪圖方法繪圖VB提供image控件、Line控件、shape控件三種控件繪圖,也可用繪圖方法在窗體、PictureBox圖象框、Printer打印機等對象上繪圖。語法格式:

[對象].方法[參數表]繪圖前要確定輸出坐標位置,坐標設置,窗體與圖片框都有CurrentX、CurrentY

屬性,用此來確定起始坐標。CurrentX、CurrentY

屬性值,隨繪圖方法而自動改變。設置語法object.CurrentX=xObject.CurrentY=y讀取語法X=object.CurrentXY=Object.CurrentY12使用繪圖方法繪圖Print方法。Cls方法清除對象上原來的內容,以背景色重畫。Pset[step](x,y)[,色]

有Step,(x,y)相對當前點(CurrentX,CurrentY)的相對坐標,否則是絕對坐標。Step意義下同。色--可用講過的五種辦法表示顏色。Line[[step](x1,y1)]-[step](x2,y2)[,色][,B[F]]

B畫矩形,F用邊框顏色填充Circle[step](x,y),r[,色][,start,end][,aspect]start,end始、終弧度值,用于畫扇形。aspect畫橢圓,橢圓的縱橫尺寸比13使用繪圖方法繪圖Point(x,y)方法讀取指定點的顏色例:X=picture1.Point(500,500)PaintPicture方法,把磁盤圖像文件繪到對象上,可以只繪制圖像的一部分、縮放、反轉等。語法:[對象.]PaintPicture

picture,x1,y1,[width1],_[height1],

[x2],[y2],[width2],[height2],[opcode]

Picture指定要繪制的圖形文件如采用下列函數加載:LoadPicture(”c:\abc.bmp”)指定繪圖的起始坐標、大小負(數翻轉圖像),X2,Y2,width2,height2—指定所繪圖的矩形區域;opcode繪圖的顏色(P237取值表),缺省為原圖顏色。14例:Circle方法繪制由圓環用Circle方法在窗體上繪制由圓環構成的藝術圖案。構造圖案的算法為:將一個半徑為r的圓周等分為n份,以這n個等分點為圓心,以半徑r1繪制n個圓。設定圓的半徑為窗體高度的1/4,圓心在窗體的中心,在圓周上等分50份。Dimr,x,y,x0,y0,piAsSingle

Clsn=Val(Text1)Ifn<=0Thenn=10r=Form1.ScaleHeight/4x0=Form1.ScaleWidth/2y0=Form1.ScaleHeight/2pi=3.1415926

st=pi/n'等分圓周為n份

Fori=0To2*piStepst'循環繪制圓

x=r*Cos(i)+x0y=r*Sin(i)+y0Circle(x,y),r*0.9,RGB(255*Rnd(),255*Rnd(),255*Rnd())Nexti15例:繪制曲線畫出函數Cos(2*i)*Sin(3*i)的數學曲線,對于這類曲線,需要用程序畫出曲線上的每一點。為了避免作坐標運算,用Scale方法對坐標系定義:Picture1.Scale(-2*pi,1)-(2*pi,-1)‘pi存貯л的值。用Line萬法連接相鄰的兩點,構成完整的曲線。PrivateSubCommand1_Click()Dimi,pipi=4*Atn(1)Picture1.Scale(-2*pi,1)-(2*pi,-1)Picture1.CurrentX=-2*piPicture1.CurrentY=0Fori=-2*piTo2*piStep0.01Picture1.Line-(i,Cos(2*i)*Sin(3*i))NextEndSub16§8.2鼠標事件前面講到的Click、DblClick事件后無參數如SubForm_DblClick()SubCommand1_Click()

所以無法知道鼠標位置、按下了哪個鼠標鍵、是否按下了鍵盤的某個控制鍵等。要知道這些詳細情況需采用下面三個鼠標事件:MouseDown事件SubForm_MouseDown(ButtonAsInteger,ShiftAs_Integer,XAsSingle,YAsSingle)

MouseUp事件SubForm_MouseUp(…………)‘參數與MouseDown相同MouseMove事件SubForm_MouseMove(…………)‘參數與MouseDown相同其中Button鼠標的鍵值,Shift鍵盤的鍵值,x、y是指針當前的坐標。17鼠標事件1、Button參數Button取值1~7,字節的低3位B0對應左鍵、B1右鍵、B2中鍵,按下鍵時為1。例:Button為2(010B),即B1為1,表示按下了右鍵;Button為1(001B),B0為1,按了左鍵。也可以使用VB符號常量

1—vbLeftButton:用戶按下左鍵觸發了鼠標事件;

2—vbRightButton:用戶按下右鍵觸發了鼠標事件;

4—vbMiddleButton:用戶按下中鍵觸發了鼠標事件。舉例:IfButton=1Then'或=vbLeftButton

…'這是按了左健后執行的代碼Endif

B2B1B018鼠標事件2、Shift參數Shift參數取值1~7,字節的低3位B0對應Shift鍵、B1Ctrl鍵、B2Alt鍵,按下鍵時為1。舉例:Shift為2(010B),即B1為1,表示僅按下了Shift鍵;同時按Ctrl和Shift鍵,則B0和B1為1,Shift為3(011B)

。也可以使用VB符號常量

1—vbShiftMask;

2—vbCtrlMask;

4—vbAltMask

。例:IfShift=2andButton=1Then …‘這是僅按住了Ctrl健并單擊鼠標后執行的代碼

EndIf3、X,Y:鼠標的當前位置B2B1B019鼠標事件舉例:彩色畫筆P251例題:有改動:Dimpencolor,dPrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)d=1IfButton=1Then

CurrentX=X'注釋此兩句出現什么情況?

CurrentY=YEndIfEndSub20PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1ThenIfShift=1Then'改變顏色,Shift鍵

pencolor=RGB(255,0,0)

ElseIfShift=2Then‘Ctrl鍵

pencolor=vbGreen

ElseIfShift=4Then‘Alt鍵

pencolor=&HFF0000EndIfIfShift=3Then'改變線寬,Ctrl和Shift鍵

d=d+0.01:DrawWidth=d:Line-(X,Y),pencolorElseLine-(X,Y),pencolorEndIfEndIfEndSub彩色畫筆21§8.3鍵盤事件KeyUp和KeyDown事件過程

Subobject_KeyUp(keycodeAsInteger,shiftAsInteger) Subobject_KeyUp(keycodeAsInteger,shiftAsInteger)KeyPress事件過程

Subobject_KeyPress(KeyAsciiAsInteger)參數說明Shift:與鼠標事件的Shift相同,按下了哪(幾)個控制鍵KeyCode:鍵盤掃描碼,整型數表示,也可用VB常數表示。VB常數KeyCode

描述vbKeyA

65

A

vbKeyB

66

B

……vbKeyZ

90

Z

vbKeyF1

0x70

F1

vbKeyF2

0x71

F2

KeyAscii:字符ASCII碼。22鍵盤事件舉例1限制數據輸入,在窗體上畫1個文本框文本框,只能接收“0”~“9”的數字字符。

SubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii<48OrKeyAscii>57Then

KeyAscii=0EndIfEndSub23鍵盤事件舉例2在窗體上畫兩個文本框,然后編寫程序。程序運行后,如果在第一個文本框中輸入A、B、C、D或a、b、c、d,則在第二個文本框中顯示EFDH。PrivateSubForm_Load()ShowText1.Text=""Text2.Text=""Text1.SetFocusEndSubPrivateSubText1_KeyDown(KeyCodeAsInteger,_ShiftAsInteger)Text2.Text=Text2.Text+Chr(KeyCode+4)EndSub24選講:鍵盤事件舉例3在窗體上畫一個文本框,然后編寫程序,當按下F5鍵并且按下Alt鍵或Shift鍵時,在窗體上顯示“再見!”

ConstShiftKey=1ConstAltKey=4ConstKey_F5=&H74PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=Key_F5And_(Shift=AltKeyOrShift=Shif

溫馨提示

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

評論

0/150

提交評論