第9章鼠標、鍵盤和OLE控件_第1頁
第9章鼠標、鍵盤和OLE控件_第2頁
第9章鼠標、鍵盤和OLE控件_第3頁
第9章鼠標、鍵盤和OLE控件_第4頁
第9章鼠標、鍵盤和OLE控件_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序設(shè)計教程第9章鼠標、鍵盤和OLE控件VisualBasic學習目標OLE控件使用了解常用的鼠標事件MouseDown、MouseUp、MouseMove常用鍵盤響應事件KeyPress、KeyDown、KeyUp拖放操作的常用屬性及事件掌握鼠標、鍵盤事件、拖放操作的應用熟悉目錄9.1鼠標鍵盤事件拖放使用OLE控件9.29.39.49.5

程序舉例9.1鼠標鼠標常用鼠標事件鼠標事件的語法格式示例鼠標常用鼠標事件鼠標事件的語法格式示例大多數(shù)控件可識別的鼠標事件除了前面章節(jié)中多次使用的Click和DblClick事件之外,還包括:MouseDown事件;MouseUp事件;MouseMove事件。我們可以使用這些事件使應用程序?qū)κ髽宋恢眉盃顟B(tài)的變化作出響應。鼠標PrivateSubObject_鼠標事件(ButtonasInteger,ShiftasInteger,XasSingle,YasSingle)EndSub注意事項:(1)Button參數(shù)用來確定按下了哪個按鈕或哪些按鈕,其取值范圍是0~7的整數(shù)。其中Button參數(shù)值為1,則按下了左鍵;Button參數(shù)值為2,則按下了右鍵;Button參數(shù)值為4,則按下了中鍵;其相應的VB常數(shù)分別為vbLeftButton,vbRightButton,vbMiddleButton。這些值的總和代表這些按鈕的組合。例如,同時按下左右按鈕的Button參數(shù)值為3(1+2)。常用鼠標事件鼠標事件的語法格式示例鼠標(2)Shift參數(shù)表示當鼠標鍵被按下或被釋放時,是否同時被按下了Shift、Ctrl、Alt鍵。其取值范圍1~7的整數(shù)。Shift參數(shù)值為1,則按下了Shift鍵;Shift參數(shù)值為2,則按下了Ctrl鍵;Shift參數(shù)值為4,則按下了Alt鍵;其相應的VB常數(shù)分別為vbShiftMask,vbCtrlMask,vbAltMask。這些值的總和代表這些鍵的組合。例如,同時按下Shift和Alt鍵的Shift參數(shù)值為5(1+4)。(3)x,y:用來確定鼠標按下時鼠標的當前坐標位置。常用鼠標事件鼠標事件的語法格式示例鼠標例8-1編寫一個在窗體上可用鼠標畫不同線條寬度的任意曲線程序。分析:MouseDown事件是三種鼠標事件中最常用的事件,按下鼠標按鈕時就可觸發(fā)此事件。釋放鼠標按鈕時,MouseUp事件被觸發(fā)。鼠標指針在屏幕上移動時就會觸發(fā)MouseMove事件。當鼠標指針處在窗體和控件的邊框內(nèi),窗體和控件均能識別MouseMove事件。MouseDown事件、MouseUp事件和MouseMove事件搭配使用,往往相得益彰。常用鼠標事件鼠標事件的語法格式示例常用鼠標事件鼠標事件的語法格式示例鼠標程序界面如下:鼠標編寫程序代碼如下:DimdrAsBoolean'設(shè)定畫線狀態(tài)PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)dr=True'設(shè)定畫線狀態(tài)Form1.DrawWidth=Val(Text1.Text)'設(shè)定線條寬度CurrentX=X'設(shè)定當前橫坐標CurrentY=Y'設(shè)定當前縱坐標EndSub'通過移動鼠標畫線PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfdrThenLine-(X,Y)'畫線EndIfEndSub常用鼠標事件鼠標事件的語法格式示例PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)dr=False'取消畫線EndSub'通過滾動條調(diào)整線條寬度PrivateSubVScroll1_Change()Text1.Text=VScroll1.ValueEndSubPrivateSubCommand1_Click()Cls'清屏EndSub常用鼠標事件鼠標事件的語法格式示例鼠標9.2鍵盤事件鍵盤事件常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件是用戶敲擊鍵盤時觸發(fā)的事件,一般用來檢測輸入數(shù)據(jù)的合法性或?qū)τ诓煌I值的輸入實現(xiàn)不同的操作。VB中常用的鍵盤事件有:KeyPress事件,KeyDown事件,KeyUp事件。鍵盤事件

1.KeyPress事件

當用戶按下和松開一個ASCII字符鍵時發(fā)生KeyPress事件(即KeyPress事件只對能產(chǎn)生ASCII碼的按鍵有反應)。該事件被觸發(fā)時,被按鍵的ASCII碼將自動傳給事件過程的KeyAscii參數(shù)。在程序中,通過訪問該參數(shù),即可獲知用戶按下了哪個鍵。其語法格式為:PrivateSubObject_KeyPress(KeyAsciiasInteger)EndSub常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件

1.KeyPress事件注意事項:

Object為可以產(chǎn)生KeyPress事件的對象;KeyAscii參數(shù)為按鍵相對應的字符ASCII碼值,大小寫字母的值不同。將KeyAscii改變?yōu)?時,可取消擊鍵,這樣對象便接收不到所按鍵的字符。具有焦點的對象才能接收該事件,如設(shè)置Text1.SetFocus,Text1_KeyPress事件才可以響應。常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件

2.KeyDown和KeyUp事件KeyDown和KeyUp事件是當一個對象具有焦點時按下或松開一個鍵時發(fā)生的。當控制焦點位于某對象時,按下鍵盤的任意一鍵,則會在該對象上觸發(fā)產(chǎn)生KeyDown事件,釋放該鍵時,將觸發(fā)產(chǎn)生KeyUp事件,之后產(chǎn)生KeyPress事件。KeyDown和KeyUp事件的格式:PrivateSubObject_KeyDown(KeyCodeasInteger,ShiftasInteger)PrivateSubObject_KeyUp(KeyCodeasInteger,ShiftasInteger)常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件

2.KeyDown和KeyUp事件注意事項:(1)KeyCode參數(shù):是按鍵的掃描碼,它的值只與按鍵在鍵盤上的物理位置有關(guān),與鍵盤的大小寫狀態(tài)無關(guān)。(2)Shift參數(shù),同鼠標事件的Shift參數(shù)取值,指示Shift、Ctrl、Alt鍵的狀態(tài)。只有檢查此參數(shù)才能判斷輸入的是大寫字母還是小寫字母。(3)雖然KeyDown和KeyUp事件可以應用于大多數(shù)鍵,但一般用來處理不被KeyPress識別的擊鍵,如功能鍵、編輯鍵、定位鍵以及任何這些鍵和鍵盤換擋鍵的組合等。(4)Tab鍵不能引用KeyDown和KeyUp事件;命令按鈕的Default屬性設(shè)置為True時,Enter鍵不能引用KeyDown和KeyUp事件;命令按鈕的Cancel屬性設(shè)置為True時,Esc鍵不能引用KeyDown和KeyUp事件;常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件【例9-2】在文本框中輸入用戶的用戶名和密碼,并在輸入時檢測按鍵的有效性,要求用戶名必須為字母構(gòu)成,長度不超過8位,密碼的長度不得少于4位。常用鍵盤事件鍵盤事件的語法格式示例程序界面如下:鍵盤事件常用鍵盤事件鍵盤事件的語法格式示例編寫程序代碼如下:“確定”按鈕Command1的Click事件為:PrivateSubCommand1_Click()IfTrim(Text1.Text)="admin"AndTrim(Text2.Text)="123456"ThenMsgBox"合法用戶,請繼續(xù)使用!"ElseMsgBox"非法用戶,請重新登錄!"EndEndIfEndSub“取消”按鈕Command2的Click事件為:PrivateSubCommand2_Click()EndEndSub鍵盤事件文本框Text1的KeyPress事件為:PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii<65OrKeyAscii>122Or(KeyAscii<97AndKeyAscii>90)OrLen(Trim(Text1.Text))>8ThenMsgBox"用戶名長度長于8位或含有非字母字符",vbOKOnly,"輸入出錯!"KeyAscii=0Text1.SetFocusEndIfEndSub文本框Text2的Validate事件為:PrivateSubText2_Validate(CancelAsBoolean)IfLen(Trim(Text2.Text))<4ThenMsgBox"密碼長度小于4位",vbOKOnly,"輸入出錯!"Text2.Text=""Cancel=TrueEndIfEndSub常用鍵盤事件鍵盤事件的語法格式示例鍵盤事件【例9-3】使用Keydown事件及Shift參數(shù)來區(qū)分字符的大小寫。常用鍵盤事件鍵盤事件的語法格式示例程序界面如下:鍵盤事件常用鍵盤事件鍵盤事件的語法格式示例編寫程序代碼如下:PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)'vbKeyA是鍵盤a的鍵盤代碼常數(shù),Shift=1表示檢測到Shift鍵IfKeyCode=vbKeyAAndShift=1ThenDimbAsIntegerb=MsgBox("你按下了大寫A鍵",vbOKOnly,"確認框")EndIfEndSub

鍵盤事件常用鍵盤事件鍵盤事件的語法格式示例KeyPressKeyDown和KeyUp事件發(fā)生的時間輸入一個ASCII字符按任意一個鍵參數(shù)值KeyAscii接收到字符的ASCII值KeyCode接收到鍵的掃描碼按Shift+A時事件發(fā)生的次數(shù)事件發(fā)生一次事件發(fā)生兩次按Shift+A時參數(shù)值(鍵盤處于大寫狀態(tài))97第一次是16第二次是65按Shift+A時參數(shù)值(鍵盤處于小寫狀態(tài))65第一次是16第二次是65KeyPress與KeyDown和KeyUp事件的有很大的區(qū)別。鍵盤事件的具體說明如下表的

鍵盤事件說明9.3拖放拖放拖放包括兩個操作:拖動(Drag):指按下鼠標并拖著控件移動;放下(Drop):指釋放鼠標鍵。在拖放操作中,通常把原來位置的對象為源對象,將要放下位置處的對象為目標對象。1.拖放的概念拖放與拖放有關(guān)的屬性有:DragMode和DragIcon。(1)DragMode屬性功能:確定拖放操作方式是自動方式還是手動方式,取值為0或1。0:(缺省),手工拖動模式;1:自動拖動模式。DragMode屬性為1時,則該對象不再接收Click事件和MouseDown事件。(2)DragIcon屬性拖動過程中顯示的圖標(.ico或.cur文件)。可以在程序中用LoadPicture()函數(shù)加載或通過其他控件的Picture屬性賦值。2.拖放的屬性拖放(1)DragDrop事件當一個控件拖動到一個目標對象上時,觸發(fā)DragDrop事件。其語法格式為:PrivateSubObject_DragDrop(SourceasControl,XasSingle,YasSingle)說明:Source:指正在被拖動的控件,即源對象。X,Y:是松開鼠標鍵時鼠標指針在目標對象中的坐標值。3.拖放的事件拖放(2)DragOver事件當拖動對象越過一個控件時便觸發(fā)該控件的DragOver事件。其語法格式為:PrivateSubObject_DragOver(SourceasControl,XasSingle,YasSingle,StateasInteger)說明:Object:表示拖放操作過程中源對象所處位置下方的控件。Source、X、Y參數(shù)含義同DragDrop事件。State:表示源對象被拖動的狀態(tài)。取值為0、1、2,分別表示鼠標光標正進入控件的區(qū)域、正退出控件的區(qū)域及正位于控件的區(qū)域之內(nèi)。3.拖放的事件拖放與拖放有關(guān)的方法是Drag方法。當DragMode為0時,才需用Drag方法啟動拖放。當然,也可對DragMode屬性設(shè)置為1的對象使用Drag方法。其語法格式為:Object.Drag[Action]說明:(1)Action是一個數(shù)值,取0、1、2。0:其常數(shù)為vbCancel,表示取消拖放操作;1(缺省):其常數(shù)為vbBeginDrag,表示開始拖放操作;2:其常數(shù)為vbEndDrag,表示結(jié)束拖放操作。(2)只有在控件沒有焦點時才能被拖動。為防止控件獲得焦點,可將TabStop屬性設(shè)置為False。4.拖放的方法拖放【例9-4】設(shè)計一個應用程序。窗體上有三個控件,分別是圖像框(笑臉)控件,命令按鈕(安裝)控件和圖片框(回收站)控件,要求圖像框和命令按鈕控件可以在窗體中隨意拖動到不同的位置。當把圖像框拖到圖片框(回收站)上釋放鼠標左鍵時,提示是否刪除該對象,若選擇刪除,則窗體中圖像框消失,圖片框中回收站圖片改變。若將命令按鈕拖到圖片框上釋放鼠標左鍵時,提示“不能刪除此對象”信息。分析:

在窗體上分別拖動三個控件:Image1、Picture1、Command1,并分別設(shè)置Picture屬性和TabStop屬性設(shè)為False。拖放程序界面如下圖所示:拖放PrivateSubForm_DragDrop(SourceAsControl,XAsSingle,YAsSingle)'將拖放的源對象移到新位置Source.MoveX-Source.Width/2,Y-Source.Width/2EndSubPrivateSubPicture1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then'判斷是否按下左鍵Picture1.Drag1'手工啟動拖放EndIfEndSub編寫程序代碼如下:拖放PrivateSubCommand1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then'判斷是否按下左鍵Command1.Drag1'手工啟動拖放EndIfEndSubPrivateSubImage1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then'判斷是否按下左鍵Image1.Drag1'手工啟動拖放EndIfEndSub程序代碼續(xù)1拖放PrivateSubPicture1_DragDrop(SourceAsControl,XAsSingle,YAsSingle)IfTypeOfSourceIsImageThen'判斷拖動源的類型IfMsgBox("確實要刪除此對象嗎?",vbYesNo,"操作提示")=vbYesThenPicture1.Picture=LoadPicture(App.Path+"\RECYFULL.ICO")Source.Visible=False'隱藏源控件ElseImage1.Drag0'取消控件的拖放操作EndIfElseMsgBox"對不起,此對象不能刪除!"EndIfEndSub程序代碼續(xù)2拖放PrivateSubCommand1_DragDrop(SourceAsControl,XAsSingle,YAsSingle)IfTypeOfSourceIsImageThenIfMsgBox("確實要刪除此對象嗎?",vbYesNo,"操作提示")=vbYesThenPicture1.Picture=LoadPicture(App.Path+"\RECYFULL.ICO")Source.Visible=FalseElseImage1.Drag0EndIfElseMsgBox"對不起,此對象不能刪除!"EndIfEndSub程序代碼續(xù)3

9.4使用OLE控件使用OLE控件VB提供了一個OLE容器控件(在工具箱中),用于容納“鏈接”對象或“嵌入”對象,也就是說,可以使用OLE容器控件來插入對象。采用OLE技術(shù)開發(fā)的應用程序可以集成其他軟件的功能,而不用重復開發(fā)相同功能。

例如,你可以通過Word、Excel、Mail、Microsoft

Graph等建立起一個包含文字處理、電子報表、電子郵件和統(tǒng)計圖形功能的綜合性辦公自動化系統(tǒng)軟件。9.4.1添加OLE容器控件在Visual

Basic的工具箱右下角,可以找到OLE控件,開發(fā)時直接使用該控件就可以開發(fā)出OLE應用程序。使用OLE控件【例9-5】在VB程序中使用Excel表格。分析:程序設(shè)計步驟如下(如圖9-5所示):(1)創(chuàng)建工程和窗體Form1;(2)單擊工具箱中的OLE控件,在窗體Form1上拖動鼠標設(shè)置控件的大小和位置,釋放鼠標后,屏幕出現(xiàn)“插入對象”對話框。(3)在列表框中選中“MicrosoftExcel工作表”,單擊“確定”按鈕;(4)窗體中顯示一個空白的Excel表格,在表格中輸入數(shù)據(jù)。(5)單擊窗體的空白區(qū)域,完成對象的創(chuàng)建。9.4.1添加OLE容器控件使用OLE控件在Windows環(huán)境下,OLE控制的對象包括兩種:嵌入對象和鏈接對象,兩者的不同之處在于插入到OLE控件的對象(數(shù)據(jù))存放的位置。嵌入對象:當嵌入一個對象時,與該嵌入對象相關(guān)聯(lián)的數(shù)據(jù)存儲在OLE自定義控制項中,并可以存入文件、剪切或拷貝至剪貼板,還可以被編輯(通過容器應用程序)。嵌入對象的數(shù)據(jù)是完全存放在嵌入的應用程序中,在該應用程序中能完全控制數(shù)據(jù),而其它軟件是不能訪問嵌入對象和它的數(shù)據(jù),嵌入對象只能由被嵌入應用程序獨占。鏈接對象:當鏈接一個對象時,與這個鏈接的對象相關(guān)聯(lián)的數(shù)據(jù)存儲在創(chuàng)建該對象的應用程序中。只有該數(shù)據(jù)的預留位置是存放在OLE自定義控制項中,數(shù)據(jù)本身并不存放在OLE自定義控制項中。鏈接對象則只是把對象中包含的數(shù)據(jù)的指針(地址)插入到應用程序中去,在該應用程序中可以訪問鏈接對象的數(shù)據(jù),但其他軟件也可以訪問到該對象的數(shù)據(jù)。9.4.2嵌入對象和鏈接對象的區(qū)別使用OLE控件9.4.3設(shè)計階段使用OLE容器控件在9.1節(jié)中我們借助“插入對象對話框”,在應用程序中沒有編寫任何代碼就為OLE控件創(chuàng)建了一個嵌入對象,如果要創(chuàng)建鏈接對象的話,則只需在圖9-5中選擇“從文件創(chuàng)建”,并指定鏈接的文檔即可(選擇“鏈接”選項),如圖9-6所示。設(shè)計時創(chuàng)建對象的另一方法是使用“特殊粘貼”對話框。使用OLE控件我們也可以編程來創(chuàng)建嵌入或鏈接對象。通過OLE控件的44個屬性、5個方法和14個事件過程,可以實現(xiàn)對OLE對象的自定義控制。OLE容器控件的常用屬性有:(1)AutoActivate:設(shè)置激活方式:0-Mannuao:手工激活;1-GetFocus:獲得焦點時被激活;2-DoubleClick:為缺省值,指雙擊時被激活;3-Automatic:自動的。9.4.4程序運行階段使用OLE容器控件使用OLE控件(2)Class屬性(類屬性)格式為:object.class類名包含幾個部分:application.objecttype.version類名:說明對象類型Application:提供對象的應用程序名Objecttype:在對象庫中定義的對象名Version:提供對象的應用程序的版本號例如:Excel.Sheet.8(3)DisplayType:指出OLE對象是顯示對象內(nèi)容還是只顯示圖標。(4)HostName:VisualBasic應用名。(5)OLETypeAllowed屬性返回或設(shè)置OLE容器控件所能包含的對象類型。語法為:object.OLETypeAllowed[=value]其中value的值設(shè)置如表9-2所示。9.4.4程序運行階段使用OLE容器控件使用OLE控件(6)SizeMode:OLE對象如何改變大?。?-對象按實際大小顯示,如果對象超出控制則被截斷;1-對象所包含的圖像適合控制的大?。?-控制適合對象的大小。(7)SourceDoc屬性指定鏈接或嵌入對象時使用的源文件名。語法為:object.sourceDoc[=name]name:指定文件名的字符串表達式。(8)Action屬性:指定作用在OLE控件上的動作(如建立、刪除、啟動等)。語法為:object.Action=value9.4.4程序運行階段使用OLE容器控件使用OLE控件【

溫馨提示

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

最新文檔

評論

0/150

提交評論