Vb程序設計_6_2015_第1頁
Vb程序設計_6_2015_第2頁
Vb程序設計_6_2015_第3頁
Vb程序設計_6_2015_第4頁
Vb程序設計_6_2015_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、主講:陳學東主講:陳學東 常丹常丹Tel: 51688529 Tel: 51688529 E-Mail: E-Mail: 北京交通大學經濟管理學院信息管理系北京交通大學經濟管理學院信息管理系2v6.1 6.1 工具欄、狀態欄、工具欄、狀態欄、ImageListImageListv6.2 6.2 進度指示器等進度指示器等v6.3 6.3 通用對話框通用對話框v6.4 6.4 控件數組控件數組v6.5 6.5 菜單控件數組菜單控件數組v6.6 6.6 使用帶標簽的控件使用帶標簽的控件v6.7 6.7 鼠標鼠標v6.8 6.8 鍵盤鍵盤3ToolBarToolBar:提供了對應用程序中最常用的菜單命

2、令的快速訪問。u在設計時,可通過“Toolbar 屬性頁”對話框加入 Button 對象。設置“標題”、“關鍵字”作為顯示文本及識別按鈕的關鍵字u在運行時,可以用 Add 和 Remove 方法將按鈕加入或刪除 Buttons 集合。uPrivate Sub TbExam_ButtonClick(ByVal Button As MSComctlLib.Button)u Select Case Buttonu Case addu MsgBox addu Case delu MsgBox delu End SelectuEnd Sub示例示例 6.16.1工具欄的使用工具欄的使用4v將將 Imag

3、eList ImageList 控件與控件與 Toolbar Toolbar 控件相關聯,建立圖片工具欄控件相關聯,建立圖片工具欄u在設計時將 ImageList 控件和 Toolbar 控件相關聯1.在窗體中加入一ImageList控件2.打開ImageList控件屬性頁,裝入用于 Toolbar 的圖象。3.用鼠標右鍵單擊 Toolbar 控件,打開“屬性頁”對話框。4.在“通用”選項卡中,在“圖象列表”框,選擇放置圖片的ImageList控件。5.在“按鈕”選項卡中,加入按扭,并設置“標題”、“關鍵字”及“圖像”(指明所用圖片在ImageList控件中的索引號)u在運行時將 ImageL

4、ist 控件與 Toolbar 控件相關聯,只需將工具欄的ImageList屬性設為ImageList 控件的名稱,如:Private Sub Form_Load()Toolbar 控件名為“tlbTools”,ImageList 控件名為“imlTools”。tlbTools.ImageList = imlToolsEnd Sub5vStatusBar StatusBar 控件:控件:u提供窗體,該窗體通常位于父窗體的底部,用于顯示應用程序的運行狀態或其它用戶提示信息。StatusBar 最多能含16個Panel對象。v創建:創建:“部件”中加入“Microsoft Windows Comm

5、on Control 6.0”v1.1.常用屬性常用屬性uSimpleText:設置或返回簡單樣式的狀態欄控件窗格上顯示的文本uPanels:返回一個對窗格對象集合的引用。對集合中的每一個成員,都可以通過其Index屬性來訪問。u如:sbrExam.Panels(1).Text = “正在運行”uStyle:設置或返回控件的樣式。sbrNormal顯示所有窗格對象,sbrSimple只顯示一個大窗格對象示例示例 6.26.2狀態攔屬性的設置狀態攔屬性的設置6v2.2.單擊右鍵,打開單擊右鍵,打開“屬性頁屬性頁”,添加及設置各窗格屬性,添加及設置各窗格屬性uStyle:設置窗格樣式,sbrTex

6、t(顯示文本和圖片),sbrCaps、sbrNum、sbrIns、sbrScrl、sbrTime、sbrDate、sbrKana(分別顯示Caps Lock鍵、Num Lock鍵、Insert鍵、Scroll Lock鍵狀態、系統時間、系統日期、Kana Lock鍵狀態日文OS)uText、Picture:設置窗格顯示文本/圖片uMinWidth、AutoSize:設置窗體大小變動時,窗格寬度的變化方式uBevel(斜面):設置窗格的外觀立體樣式(凹、凸及平面)v3.3.常用方法常用方法uAdd:在狀態欄上加一窗格u例:sbrExam.Panels.Add Index, Key, Text,

7、Style, PictureuRemove Index:刪除序號為Index的窗格u示例:frmControl.frm7uProgressBar 控件通過從左到右用一些方塊填充矩形來表示一個較長操作的進度。監視操作完成的進度。u行程和當前位置:行程代表該操作的整個持續時間。當前位置則代表應用程序在完成該操作過程時的進度。Max和 Min 屬性設置了行程的界限。Value 屬性則指明了在行程范圍內的當前位置。uHeight屬性和Width 屬性決定所填充控件的方塊的數量和大小。uAlign 屬性把它自動定位在窗體的頂部或底部。u下面的示例說明如何用一個名為 ProgressBar1 的 Prog

8、ressBar 控件,來表示對一個大數組冗長的操作進度。把一個 CommandButton 控件和一個 ProgressBar 控件放在同一窗體里。示例代碼中的 Align 屬性把 ProgressBar 控件定位在沿著窗體的底部。該 ProgressBar 不顯示任何文本。uProgressBar 控件是 ActiveX 控件組的組成,該控件組可以在文件 COMCTL32.OCX 中找到。8uPrivate Sub Command1_Click()uDim Counter As IntegeruDim Workarea(250) As StringuProgressBar1.Min = LB

9、ound(Workarea)uProgressBar1.Max = UBound(Workarea)uProgressBar1.Visible = TrueuProgressBar1.Value = ProgressBar1.Minu在整個數組中循環。uFor Counter = LBound(Workarea) To UBound(Workarea)u 設置數組中每項的初始值。u Workarea(Counter) = Initial value & CounteruProgressBar1.Value = CounteruNext CounteruProgressBar1.Visible

10、= FalseuProgressBar1.Value = ProgressBar1.MinuEnd SubuPrivate Sub Form_Load()uProgressBar1.Align = vbAlignBottomuProgressBar1.Visible = FalseuCommand1.Caption = Initialize arrayuEnd Sub9u 創建反映超時間隔的進度欄uPrivate Sub Form_Load()uprgBar1.Visible = FalseutmrTimer.Interval = 1000uprgBar1.Max = 10 Timer 將運行

11、 10 秒鐘。uEnd SubuPrivate Sub cmdBegin_Click()uprgBar1.Visible = TrueutmrTimer.Enabled = TrueuEnd SubvPrivate Sub tmrTimer_Timer()vStatic intTime 聲明靜態變量。v第一次執行時,該變量應為空值。v如果它是空變量,將其設置為 1。vIf IsEmpty(intTime) Then intTime = 1vprgBar1.Value = intTime 更新 ProgressBar。vIf intTime = prgBar1.Max ThenvTimer1.E

12、nabled = FalsevprgBar1.Visible = FalsevintTime = 1vprgBar1.Value = prgBar1.MinvElsevintTime = intTime + 1vEnd IfvEnd Sub示例示例 6.3 6.3進度指示器演示進度指示器演示10uCommonDialog CommonDialog 控件:控件:提供一組標準的操作對話框,進行諸如打開和保存文件,設置打印選項,以及選擇顏色和字體等操作。通過運行 Windows 幫助引擎控件還能顯示幫助。u在應用程序中要使用 CommonDialog 控件,可將其添加到窗體中并設置其屬性。控件所顯示

13、的對話框由控件的方法確定。注意:使用前,從“部件”中加入“Microsoft Common Dialog Control6.0”u使用指定的方法,CommonDialog 控件能夠顯示下列對話。ShowOpen顯示“打開”對話框ShowSave顯示“另存為”對話框ShowColor顯示“顏色”對話框ShowFont顯示“字體”對話框ShowPrinter顯示“打印”或“打印選項”對話框ShowHelp調用 Windows 幫助引擎u包括很多在對話框中設置控件特性的屬性示例示例 6.46.4公共對話框的使用公共對話框的使用11v1.1.常用屬性常用屬性uFlags屬性:設置公用對話框的預先定義值

14、(參見P103)uColor屬性:返回/設置選擇顏色對話框的顏色值uFilter屬性:返回/設置“打開”“另存為”,類型列表中的過濾器uFilterIndex屬性:返回/設置“打開”“另存為”,類型過濾器中的缺省值uInitDir屬性:返回/設置“打開”“另存為”,缺省的目錄uFileName屬性:返回/設置“打開”“另存為”,選定文件的路徑和文件名uDefaultExt屬性:返回/設置“打開”“另存為”,缺省文件擴展名uFontBond、FontItalic、FontName、FontSize屬性:返回/設置字體的各屬性uCopies、hDC、fromPage、toPage、Orientat

15、ion屬性:返回/設置打印份數、打印機描述、起止頁、頁面方向12u運行時,選定顏色并關閉對話框后可用Color屬性獲取選定顏色。u為了顯示“顏色”對話框,請1、將控件的 Flags 屬性設置成常數 cdlCCRGBInit。2、用 ShowColor 方法顯示對話框。3、用公用對話框的Color屬性取用戶選定的顏色設置值。uPrivate Sub Command1_Click ()u將 Cancel 設置成 True。uCommonDialog1.CancelError = TrueuOn Error GoTo ErrHandleru設置 Flags 屬性。uCommonDialog1.Fla

16、gs = cdlCCRGBInitu顯示“顏色”對話框。uCommonDialog1.ShowColor u將窗體的背景顏色設置成選定的顏色。uForm1.BackColor = CommonDialog1.ColoruExit SubuErrHandler: 用戶按了“取消”按鈕uExit SubuEnd Sub13u控件數組是一組具有共同名稱和類型的控件。它們的事件過程也相同。u同一控件數組中的元素有自己的屬性設置值。常見的控件數組的用處包括實現菜單控件和選項按鈕分組。u為何使用控件數組為何使用控件數組所消耗的資源比直接向窗體添加多個相同類型的控件消耗的資源要少。當希望若干控件共享代碼時,

17、控件數組也很有用。若要在運行時創建新控件,則新控件必須是控件數組的成員。使用控件數組時,每個新成員繼承數組的公共事件過程。沒有控件數組機制是不可能在運行時創建新控件的,因為全新控件不具有任何事件過程。u示例應用程序:示例應用程序:Calc.vbp如果安裝了示例應用程序,則可在主 Visual Basic 目錄 (VBSamplesPguide) 的子目錄 Calc 下找到此應用程序。示例示例 6.5 6.5 控件數組實控件數組實現的簡單計算器現的簡單計算器14u在運行時,可用 Load 和 Unload 語句添加和刪除控件數組中的控件,使用如下語法:Load object(index%)Unl

18、oad object(index%)uobject在控件數組中添加或刪除的控件名稱。uindex%控件在數組中的索引值。u加載控件數組的新元素時,大多數屬性設置值將由數組中具有最小下標的現有元素復制。u不會自動把 Visible、Index 和 TabIndex 屬性設置值復制到控件數組的新元素中,所以,為了使新添加的控件可見,必須將其 Visible 屬性設置為 True。u注意:試圖對數組中已存在的索引值使用 Load 語句時,VB將生成一個錯誤。u重點:可用 Unload 語句刪除所有由 Load 語句創建的控件,然而,Unload 無法刪除設計時創建的控件,無論它們是否是控件數組的一部

19、分。15u菜單控件數組就是在同一菜單上共享相同名稱和事件過程的菜單項目的集合。菜單控件數組使用于:在運行時要創建一個新菜單項,例如:用一個菜單控件數組來存儲新近打開的文件清單。簡化代碼,因為通用代碼塊可以被所有菜單項使用。u每個菜單控件數組元素都由唯一的索引值來標識,當一個控件數組成員識別一個事件時,其Index 屬性值作為一個附加的參數傳遞給事件過程。事件過程必須包含有核對 Index 屬性值的代碼,因而可以判斷出正在使用的是哪一個控件。u在菜單編輯器中創建菜單控件數組將數組中第一個元素的“索引索引”設置為 0。將第二個元素的“名稱名稱”設置成與第一個元素相同,且把它的“索引索引”設置為 1

20、。對于數組中的后續元素重復步驟。u菜單控件數組的各元素在菜單控件列表框中必須是連續的,而且必須在同一縮進級上。要把在菜單中出現的分隔符條也包括進去。16u設計時創建的菜單也能動態地響應運行時的條件。u使菜單命令有效或無效:所有的菜單控件都具有 Enabled 屬性,當 Enabled 設為 False 時,快捷鍵的訪問也無效。一個無效的菜單控件會變暗。菜單標題的無效使得整個菜單無效。u顯示菜單控件上的復選標志 使用 Checked 屬性,可以把一個復選標志放置在菜單上以便u表示打開/關閉條件的狀態。選取菜單命令可交替地增加和刪除此復選標志。u指示幾個模式中哪一個正在起作用。u使菜單控件不可見V

21、isible 屬性= False使控件不可見。注意 使菜單控件不可見也產生使之無效的作用,因為該控件通過菜單、訪問鍵或者快捷鍵都再無法訪問。如果菜單標題不可見,則該菜單上所有控件均無效。示例示例 6.66.6菜單的編輯菜單的編輯17u如果有一個菜單控件數組,也可以動態地增加菜單項。當創建 mnuRecentFile(0) 時,實際上創建了一個在運行時不可見的分隔符條。當運行時用戶第一次存儲一個文件時,這個分隔符條就會變得可見,且第一個文件名被加到該菜單上。運行時每存儲一個文件,則會再裝入一個菜單控件到該數組中,從而使該菜單增長。運行時所創建的控件可以使用 Hide 方法或者設置該控件的 Vis

22、ible 屬性為 False 來隱藏。如果要從內存中刪除一個控件數組中的控件,請使用 Unload 語句。18vSSTab 控件u提供了一組選項卡,每個選項卡都可作為其它控件的容器。u在控件中,同一時刻只有一個選項卡是活動的,這個選項卡向用戶顯示它本身所包含的控件而隱藏其它選項卡中的控件。u在應用程序中為某個窗口或對話框的相同區域定義多個頁面。u用這個控件的屬性可以:決定選項卡的數目。把選項卡組織到多于一行中。為每一個選項卡設置文本。在每個選項卡上顯示一幅圖形。決定所用選項卡的樣式。設置每個選項卡的大小。u在運行時,用戶可按 CTRL+TAB 鍵或使用每個選項卡的標題中所定義的加速鍵在選項卡之

23、間移動。u也可用 StyleStyle、ShowFocusRectShowFocusRect、TabOrientationTabOrientation 和 WordWrapWordWrap 屬性定制整個 SSTabSSTab 控件。u可在文件 TABCTL32.OCX 中找到 SSTabSSTab 控件。vTabStrip控件示例示例 6.76.7帶標簽控件的使用帶標簽控件的使用19u可通過 MouseDown、MouseUp、MouseMove 事件使應用程序對鼠標位置及狀態的變化作出響應。MouseDown按下任意鼠標按鈕時發生。MouseUp釋放任意鼠標按鈕時發生。MouseMove每當

24、鼠標指針移動到屏幕新位置時發生。u當鼠標指針位于無控件的窗體上方時,窗體將識別鼠標事件。當鼠標指針在控件上方時,控件將識別鼠標事件。u如果按下鼠標按鈕不放,則對象將繼續識別所有鼠標事件,直到用戶釋放按鈕。即使此時指針已移離對象,情況也是如此。u三種鼠標事件使用下列參數。Button:位域參數,最不明顯的三位描述鼠標按鈕的狀態。Shift:位域參數,最不明顯的三位描述 SHIFT、CTRL 與 ALT 鍵的狀態。x, y:鼠標指針的位置。u位域參數返回單個位的信息,每個位的信息都指出某狀態是打開的還是關閉的。使用二進制的記法時,稱最左側三位為最明顯位,而稱最右側三位為最不明顯位。20uMouse

25、Down 是三種鼠標事件中最常使用的事件。例如,在運行時可用它調整控件在窗體上的位置,也可用它實現某些圖形效果。按下鼠標按鈕時就可觸發此事件。u注意 不應將鼠標與 Click 事件和 DblClick 事件混為一談。u結合 Move 方法使用 MouseDown 事件將命令按鈕移動到窗體的不同位置。在單擊窗體的任意位置(除控件所在處外)時控件將移動到光標位置。Private Sub Form_MouseDown (Button As Integer, _Shift As Integer, X As Single, Y As Single)Command1.Move X, YEnd Subu修改

26、此過程,以便將控件的中心放置在鼠標位置:Command1.Move (X - Command1.Width / 2), _(Y - Command1.Height / 2)示例示例 6.86.8鼠標事件響應及鼠標事件響應及21u結合結合 Line Line 方法使用方法使用 MouseDown MouseDown 事件事件在先前的繪制位置與鼠標指針的新位置之間畫一條直線。Line 方法將繪制一條從上次繪制點到點 (x2, y2) 的直線。LineLine - (x2, y2)Private Sub Form_MouseDown (Button As Integer, _Shift As Int

27、eger, X As Single, Y As Single)Line -(X, Y)End Sub第一條直線始于缺省起點,也就是左上角。因此無論何時,只要按下鼠標,應用程序就會繪制一條從先前直線到鼠標目前位置的直線。程序運行的結果是一系列連接的直線。22u釋放鼠標按鈕時,MouseUp 事件將會發生。uMouseUp 與 MouseDown 和 MouseMove 事件搭配使用,往往相得益彰。下例說明如何將三個事件聯合使用。u只有在按住鼠標按鈕時才繪圖,而在釋放按鈕時停止繪圖uMouseDown 與 MouseUp 將通知應用程序開始繪圖與停止繪圖。u創建一個代表繪圖狀態的窗體級變量就可指定

28、這一點。Dim DrawNow As BooleanPrivate Sub Form_MouseDown (Button As Integer, _Shift As Integer, X As Single, Y As Single)DrawNow = TrueCurrentX = XCurrentY = YEnd SubPrivate Sub Form_MouseUp (Button As Integer, _Shift As Integer, X As Single, Y As Single)DrawNow = FalseEnd Sub23u只有當 DrawNow 為 True 時,Mou

29、seMove 過程才繪制直線,否則不執行任何操作:Private Sub Form_MouseMove (Button As Integer, _Shift As Integer, X As Single, Y As Single)If DrawNow Then Line -(X, Y)End Subu每次按鼠標按鈕時都會執行 MouseDown 事件過程并打開繪圖狀態。于是,按住鼠標按鈕并在屏幕上拖動指針時將不斷重復執行 MouseMove 事件過程。u注意,Line 方法忽略了第一個端點,這使 Visual Basic 從鼠標指針坐標的當前位置開始繪圖。在缺省狀態下,繪圖坐標是相對于上一次

30、的繪圖點的;在 Form_MouseDown 過程中重新設置了窗體的 CurrentX 與 CurrentY 屬性。24v當鼠標指針在屏幕上移動時就會發生 MouseMove 事件。v當鼠標指針處在窗體和控件的邊框內時,窗體和控件均能識別 MouseMove 事件。v結合 Line 方法使用 MouseMove 事件u使用圖形方法在 MouseMove 過程中的效果與在 MouseDown 過程中的效果截然不同。使用相同方法繪制的是曲線而不是相互連接的線段。u每當鼠標指針位置變更時都要識別 MouseMove 事件。Private Sub Form_MouseMove (Button As I

31、nteger, _Shift As Integer, X As Single, Y As Single)Line -(X, Y)End Sub25vMouseMove 如何工作u當指針移過屏幕時要調用多少次 MouseMove 事件?u并不是對鼠標經過的每個像素,都會生成 MouseMove 事件。操作環境每秒生成有限多個鼠標消息。應用程序在每次識別 MouseMove 事件之處,應用程序都繪制一個小圓圈。Private Sub Form_MouseMove (Button As Integer,_Shift As Integer, X As Single, Y As Single)Line

32、-(X, Y)Circle (X, Y), 50End Subu注意,指針移動的越快,在任何兩點之間所能識別的 MouseMove 事件越少。眾多圓圈擠在一起表明鼠標在此位置移動緩慢。u應用程序能接二連三迅速識別大量 MouseMove 事件。因此,一個 MouseMove 事件過程不應去做那些需要大量計算時間的工作。26uMouseDown、MouseUp 和 MouseMove 事件用 button 參數判斷按下的是哪個鼠標按鈕或哪些鼠標按鈕。button 參數是位域參數 一個值,其每位代表一個狀態或條件。這些值被表示成整數。u三個最不明顯位(最低位)分別表示鼠標的左按鈕、右按鈕和中按鈕。

33、每一位的缺省值為 0 (False)。button 參數用十進制數值或常數表示這些二進制模式。0011vbLeftButton按下左按鈕。0102vbRightButton 按下右按鈕。1004vbMiddleButton按下中間按鈕。u直接將十進制值相加就可導出某些按鈕值或按鈕與/或 shift 鍵組合的值。u將十進制數值 4 分配給鼠標中間按鈕。同時按下左、右按鈕就會產生單個數值 3 (1+2)。27v對于 MouseMove 事件,button 指出了鼠標按鈕的全部狀態 不象在 MouseDown 和 MouseUp 事件中那樣僅僅指出哪個按鈕觸發事件。u檢測單個按鈕:檢測單個按鈕:如果

34、檢測 MouseMove 是否等于 001(十進制 1),則意味著檢測在移動鼠標時是否只按住左按鈕。如果還有其它按鈕與左按鈕一同被按住,則下列代碼不顯示任何信息:Private Sub Form_MouseMove (Button As Integer, _Shift As Integer, X As Single, Y As Single)If Button = 1 Then Print Youre pressing _only the left button.End Subu為了檢測是否按下某個特定按鈕,應使用 And 操作符:Private Sub Form_MouseMove (But

35、ton As Integer, _Shift As Integer, X As Single, Y As Single)If Button And 1 Then Print Youre pressing _the left button.If Button And 2 Then Print Youre pressing _the right button.End Subu同時按下兩個按鈕后,在窗體上將顯示兩條信息。MouseMove 事件能夠識別多個按鈕狀態。28u檢測多個按鈕:在大多數情況下,為了將已按下的按鈕隔離開,應使用 MouseMove 事件。uPrivate Sub Form_Mo

36、useMove(Button As Integer, _uShift As Integer, X As Single, Y As Single)uIf Button = 1 ThenuPrint Youre pressing the left button.uElseIf Button = 2 ThenuPrint Youre pressing the right button.uElseIf Button = 3 ThenuPrint Youre pressing both buttons.uEnd IfuEnd Subuu也可用 And 操作符與 Select Case 語句判斷 butt

37、on 和 shift 狀態。And 操作符與 Select Case 語句結合可隔離三按鈕鼠標可能具有的按鈕狀態并顯示相應信息。29u在窗體聲明部分創建名為 ButtonTest 的變量:uDim ButtonTest as Integeru將下列代碼添加到窗體的 MouseMove 事件中:uPrivate Sub Form_MouseMove(Button As Integer, _uShift As Integer, X As Single, Y As Single)uButtonTest = Button And 7uSelect Case ButtonTestuCase 1 或 vb

38、LeftButtonuPrint Youre pressing the left button.uCase 2 或 vbRightButtonuPrint Youre pressing the right button.uCase 4 或 vbMiddleButtonuPrint Youre pressing the middle button.uCase 7uPrint Youre pressing all three buttons.uEnd SelectuEnd Sub30u可用 button 參數增強 圖形鼠標應用程序的功能:當按下左按鈕時繪制連續線;釋放按鈕時則停止繪制;當用戶按下右

39、按鈕時,應用程序將繪制一條從上次繪制點出發的直線。u留意每個相關事件和預期響應是非常有益的。Form_MouseDown:根據鼠標按鈕狀態的不同,事件執行不同的操作:如果按下左按鈕,則設置 DrawNow 為 True 并重置繪圖坐標;如果按下右按鈕,則繪制直線。Form_MouseUp:如果釋放左按鈕,則設置 DrawNow 為 False。Form_MouseMove:如果 DrawNow 為 True,則繪制一條直線。31u在窗體的聲明部分聲明變量 DrawNow:Dim DrawNow As Booleanu根據觸發事件的是左按鈕還是右按鈕,MouseDown過程執行不同的操作:Pri

40、vate Sub Form_MouseDown (Button As Integer, _Shift As Integer, X As Single, Y As Single)If Button = vbLeftButton ThenDrawNow = TrueCurrentX = XCurrentY = YElseIf Button = vbRightButton ThenLine -(X, Y)End IfEnd Subu僅當釋放左按鈕后,MouseUp 過程才停止繪圖:Private Sub Form_MouseUp (Button As Integer, _Shift As Integ

41、er, X As Single, Y As Single)If Button = vbLeftButton Then DrawNow = FalseEnd Sub注意,在 MouseUp 過程中,將位設置為 1 (vbLeftButton),這個位就指出已釋放鼠標左按鈕,因此應停止繪圖。32u以下 MouseMove 過程和本章前面的“MouseMove 事件”中的 Scribble 應用程序里的過程相同。Private Sub Form_MouseMove (Button As Integer, _Shift As Integer, X As Single, Y As Single)If D

42、rawNow Then Line -(X, Y)End Sub33v鼠標和鍵盤事件用 shift 參數判斷是否按下了 SHIFT、CTRL 和 ALT 鍵,以及以什么樣的組合(如果存在)按下這些鍵。vshift 中的三個最不明顯位對應 SHIFT、CTRL 和 ALT 鍵的狀態。下表列出這些值和常數:u0011vbShiftMask按 SHIFT 鍵。u0102vbCtrlMask按 CTRL 鍵。u1004vbAltMask按 ALT 鍵。u0113vbShiftMask + vbCtrlMask按 SHIFT 鍵和 CTRL 鍵。u1015vbShiftMask + vbAltMask按

43、SHIFT 鍵和 ALT 鍵。u1106vbCtrlMask + vbAltMask按 CTRL 鍵和 ALT 鍵。u1117vbCtrlMask + vbAltMask + vbShiftMask按 SHIFT、CTRL 和 ALT 鍵。v可將 If.Then.Else 語句或 And 操作符與 Select Case 語句組合使用以判斷是否按下 SHIFT、CTRL 和 ALT 鍵以及以什么樣的組合(若存在)按下這些鍵。v打開一個新工程并將變量 ShiftTest 添加到窗體的聲明部分:Dim ShiftTest as Integer34u將下列代碼添加到窗體的 MouseDown 事件中

44、:uPrivate Sub Form_MouseDown(Button As Integer, _uShift As Integer, X As Single, Y As Single)ShiftTest = Shift And 7Select Case ShiftTestCase 1 或 vbShiftMaskPrint You pressed the SHIFT key.Case 2 或 vbCtrlMaskPrint You pressed the CTRL key.Case 4 或 vbAltMaskPrint You pressed the ALT key.Case 3Print Y

45、ou pressed both SHIFT and CTRL.Case 5Print You pressed both SHIFT and ALT.Case 6Print You pressed both CTRL and ALT.Case 7Print You pressed SHIFT, CTRL, and ALT.End SelectuEnd Sub35v可用 MousePointer 和 MouseIcon 屬性顯示自定義圖標、光標或任意定義過的鼠標指針。v鼠標指針的改變可以告知用戶諸多信息,例如,正在進行長時間的后臺任務,調整某個控件或窗口的大小等等。v可用 MousePointer

46、 屬性在十六個預定義指針中任選一個。這些指針表示各種系統事件和過程。如:uvbHourglass:警告用戶程序狀態在改變。例如,顯示沙漏是通知用戶等待。uvbSizePointer:通知用戶功能在改變。例如,雙箭頭型調整指針告知用戶此時可以調整窗口的大小。uvbNoDrop 警告用戶無法執行某操作。例如,不放下指針告知用戶不能在此位置放下文件。36u每個指針選項均由一個整型設置值表示。缺省設置值為 0-Default 并顯示成標準的 Windows 箭頭指針。但是,此設置由操作系統控制,如果用戶改變系統指針箭頭,則會改變設置值。u選定控件或窗體的 MousePointer 屬性并掃描下拉設置值

47、列表,或者使用“對象瀏覽器”并搜索 MousePointerConstants,通過這兩種方式就可使用鼠標指針的完全列表。u在設置控件的 MousePointer 屬性而且鼠標經過此控件時,指針就會出現。在設置窗體的 MousePointer 屬性而且鼠標經過窗體的空白區域或經過 MousePointer 屬性為 0-Default 的控件時,選定的指針都會出現。u運行時,可用整型數值或 Visual Basic 鼠標指針常數設置鼠標指針值。例如:Form1.MousePointer = 11 或 vbHourglass37u示例:當在屏幕上畫圓時將鼠標指針改變為沙漏標,然后在過程結束時將沙漏

48、標恢復為鼠標指針。Private Sub Form_Click ()Dim I 聲明變量。 將鼠標指針改變為沙漏標。Screen.MousePointer = vbHourglass 設置隨機的顏色和在窗體上畫圓。For I = 0 To ScaleWidth Step 50 ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)Circle (I, ScaleHeight * Rnd), 400Next 返回鼠標指針到正常狀態。Screen.MousePointer = vbDefaultEnd Subu同示例同示例 6.86.838v圖標和光標u可

49、設置鼠標指針來顯示自定義圖標或光標。u圖標就是 .ico 文件,光標就是 .cur 文件,在本質上象圖標一樣是位圖。但是創建光標主要是為了顯示由鼠標引發的操作發生的位置 它們可表示鼠標的狀態及當前的輸入位置。u光標中還包含熱點信息。熱點是跟蹤光標位置 x 和 y 坐標 的像素。熱點通常位于光標的中央。u注意注意 Visual Basic 不支持彩色光標;僅顯示黑白光標。因此,在用 MouseIcon 屬性創建自定義鼠標指針時,應考慮哪一點更重要:色彩還是位置跟蹤功能。若是色彩則用彩色圖標。若需要精確跟蹤,則應使用光標。u為使用自定義圖標或光標,應設置 MousePointer 和 MouseI

50、con 屬性。39u使用使用 .ico .ico 文件作鼠標指針文件作鼠標指針1.1.選定一個窗體或控件并將其 MousePointer 屬性設置為 99-Custom。2.2.將 .ico 文件加載到 MouseIcon 屬性中。例如,對于窗體:uForm1.MouseIcon = LoadPicture(c:Program _uFilesMicrosoft Visual _uBasicIconsComputerDisk04.ico)u為把圖標顯示成鼠標指針,必須正確設置這兩個屬性。在將 MousePointer 屬性設置成 99-Custom 時,如果未在 MouseIcon 上加載圖標,

51、則使用缺省的鼠標指針。同樣,如果未將 MousePointer 屬性設置成 99-Custom,則將忽略 MouseIcon 的設置。u注意注意 Visual Basic 不支持動畫光標 (.ani) 文件。40u鍵盤事件和鼠標事件都是用戶與程序之間交互操作中的主要元素。u單擊鼠標和按下按鍵都可觸發事件,而且還提供進行數據輸入的手段以及在窗口和菜單中移動的基本形式。u盡管操作系統為這些操作提供了無懈可擊的后端,但有時也需要修改或增強它們的功能。而使用 KeyPress、KeyUp 和 KeyDown 事件就可做必要的修改并增強功能。u可以把編寫響應擊鍵事件的應用程序看作是編寫鍵盤處理器。鍵盤處

52、理器可在控件級和窗體級這兩個層次上工作。u控件級(低級)處理器可對特定控件編程。例如,可能希望將 Textbox 這個控件中的輸入文本都轉換成大寫字符。u窗體級處理器可使窗體首先響應擊鍵事件。于是就可將焦點轉換成窗體的控件并重復或啟動事件。u通過擊鍵事件可在標準鍵盤編寫代碼來處理大多數按鍵。 關于處理區域字符集和鍵盤的詳細信息,請參閱“國際化”。41u三種鍵盤事件,窗體和接受鍵盤輸入的控件都識別這三種事件。KeyPress按下對應某 ASCII 字符的鍵KeyDown按下鍵盤的任意鍵KeyUp釋放鍵盤的任意鍵u只有獲得焦點的對象才能夠接受鍵盤事件。對于鍵盤事件,只有當窗體為活動窗體且其上所有控

53、件均未獲得焦點時,窗體才獲得焦點。但是,如果將窗體上的 KeyPreview 屬性設置為 True,則對每個控件在控件識別其所有鍵盤事件之前,窗體就會接受這些鍵盤事件。當希望無論何時按下某按鍵都會執行同一個操作,而不管哪個控件在此時具有焦點時,這樣設置 KeyPreview 屬性極為有用。uKeyDown 和 KeyUp 事件提供了最低級的鍵盤響應。例如,可用這些事件檢測 KeyPress 事件無法檢測到的情況:SHIFT、CTRL 和 ALT 鍵的特殊組合。箭頭鍵。注意,某些控件(命令按鈕、選項按鈕和復選框)不接受箭頭鍵事件:相反,按下箭頭鍵后將使焦點移動到另一個控件。PAGEUP 和 PA

54、GEDOWN。區分數值小鍵盤的數字鍵與打字鍵盤的數值鍵。不僅響應按鍵操作而且響應釋放鍵的操作(KeyPress 只響應按鍵操作)與菜單命令無聯系的功能鍵。示例示例 6.96.9鍵盤的響應事件鍵盤的響應事件42ukeyboard 事件彼此并不相互排斥。按下一鍵時將生成 KeyDown 和 KeyPress 事件,而松開此鍵后生成 KeyUp 事件。當用戶按下一個 KeyPress 不能檢測的鍵時將觸發 KeyDown 事件,而松開此鍵后時生成 KeyUp 事件。u使用 KeyUp 和 KeyDown 事件之前要確保 KeyPress 事件的功能不夠使用。KeyPress 事件檢測的鍵對應于所有標

55、準 ASCII 字符:ENTER、TAB、BACKSPACE 鍵以及標準鍵盤的字母、數字和標點符號鍵。通常,編寫 KeyPress 事件的代碼比較容易。u還應考慮使用快捷鍵和訪問鍵。快捷鍵必須與菜單命令相聯系,但它們可包括功能鍵(包括某些功能鍵與 shift 鍵的組合)。分配快捷鍵時無需編寫附加的代碼。u注意注意 Windows ANSI 字符集對應 256 個字符,包括標準拉丁字母、出版符(例如版權標志、em 虛線和省略號)以及許多替換字符和重音符號字符。這些字符由唯一的一字節數值 (0-255) 表示。ASCII 本質上是 ANSI 字符集的一個子集 (0-127),代表標準鍵盤上的標準字

56、母、數字和標點符號。在提及這兩種字符集時可將它們互換。43u編寫應用于窗體上所有對象的鍵盤處理器,使它很容易對具體擊鍵事件作出一般響應。設置窗體的 KeyPreview 屬性為 True:Private Sub Form_LoadForm1.KeyPreview = TrueEnd Subu聲明 ShiftKey變量并使用Select Case語句可檢測窗體的多種擊鍵狀態Dim ShiftKey as Integer將 Textbox 控件和 CommandButton 控件添加到窗體中并將以下過程添加到窗體的 KeyDown 事件中:Private Sub Form_KeyDown(KeyC

57、ode As Integer, _Shift As Integer)ShiftKey = Shift And 7Select Case ShiftKeyCase 1 或 vbShiftMaskPrint You pressed the SHIFT key.Case 2 或 vbCtrlMaskPrint You pressed the CTRL key.Case 4 或 vbAltMaskPrint You pressed the ALT key.End SelectEnd Sub44u如果已為菜單控件定義快捷鍵,那么,當按下該鍵時會自動觸發菜單控件的 Click 事件而不是鍵事件。u同樣,如

58、果在窗體上有一個命令按鈕,其 Default 屬性被設置為 True,則 ENTER 鍵將觸發此命令按鈕的 Click 事件而不是鍵事件。如果將命令按鈕的 Cancel 屬性設置為 True,則 ESC 鍵將觸發按鈕的 Click 事件而不是鍵事件。u例如,如果將 Click 事件過程添加到 CommandButton,然后將 Default 或 Cancel 屬性設置為 True,則按下 RETURN 或 ESC 鍵時,KeyDown 事件會遭到拒絕。以下過程關閉應用程序:Private Sub Command1_Click()EndEnd Subu注意,除非窗體上的每個控件都無效或其 TabStop 屬性都為 False,否則,TAB 鍵會將焦點從一個控件移動到另一個控件而不觸發擊鍵事件。u當把窗體的 KeyPreview 屬性設置為 True 時,窗體在控件之前識別鍵盤事件,但對控件來說事件仍然會發生。為防止這種情況,可將窗體鍵盤事件過程中的 keyascii 或 keycode 設置為 0。45u例如,如果在窗體上沒有缺省按鈕,則可用 ENTER 鍵將焦點從一個控件移動到另一個控件:uPrivate S

溫馨提示

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

評論

0/150

提交評論