鼠標是WINDOWS環境下不可缺少的輸入工具,在應用程序中靈活地使用鼠標功能,會給工作帶來極大的 方便.VISUAL FOXPRO6.0和VISUAL BASIC6.0是MICROSOFT VISUAL STUDIO98面向對象的可視化開發環境, 它功能非常強大,而且設計程序簡單實用.它提供了與鼠標操作有關的事件和API函數,所以編寫鼠標功能 程序就變得非常簡單,只需在程序中調用這些事件和API函數即可.
一.與鼠標有關的事件和WINDOWS API函數:
1.MOUSEDOWN 按下鼠標事件.
當用戶按下鼠標上的任一按鈕時,就會引發該事件.
調用格式:
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
①BUTTON參數是用來指示鼠標按鈕的狀態.它用二進制來表示.參數值含義如下:
001:左按鈕按下. 010:右按鈕按下.
011:左右按鈕都按下. 000:都沒按下.
100:中間按鈕按下. 111:三個按鈕都按下.
②SHIFT參數用來指示SHIFT,CTRL和ALT三個鍵的狀態.參數值含義如下:
001:SHIFT按下. 010:CTRL按下.
110:CTRL和ALT按下. 011:SHIFT和CTRL按下.
100:ALT按下. 101:SHIFT和ALT按下.
111:SHIFT,CTRL和ALT都按下.
③參數X和Y指示鼠標在對象上按下時的位置.
2.MOUSEUP 釋放鼠標事件.
當用戶松開鼠標按鈕時,就會引發該事件.
調用格式:(參數含義與MOUSEDOWN過程相同.)
Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
3.MOUSEMOVE 移動鼠標事件.
當用戶將鼠標移到新位置時,就會引發該事件.
調用格式:(參數含義與MOUSEDOWN過程相同.)
Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
4.WINDOWS API的SwapMouseButton()函數對換鼠標的左右鍵.
語法格式:
Private Declare Function SwapMouseButton Lib "USER32" Alias "SwapMouseButtonA" (ByVal BSWAP As Integer) As Integer
參數BSWAP含義:如為TRUE,則左按鈕產生右按鈕的鼠標消息,右按鈕產生左按
鈕的鼠標消息.如為FALSE,則正常解釋鼠標按鈕的輸入.
返回值含義:如為TRUE,說明鼠標的左右按鈕功能已經對調.如為FLASE,說明鼠
標按鈕功能恢復原狀態.
─────────────────────────────────────
二.VISUAL FOXPRO應用實例:
實例一:利用鼠標事件在窗體上畫圓。
當鼠標左鍵按下時可以作圖,而當鼠標左鍵釋放時,則無法作圖;而當鼠標移動時,
則畫出圖來。把鼠標左鍵按下與否作為作圖的開關,鼠標移動就連續畫圖,本例是
連續畫出圓來。
在窗體FORM1建立如下事件:
Form1LPARAMETERS nButton, nShift, nXCoord, nYCoord
Form1.Init事件,建立一個全局變量mark,用於是否畫圖的開關變量,
當mark為真時,可以作圖,否則不能作圖。
public mark
thisform.scalemode=3
thisform.drawwidth=2
Form1.MouseDown事件,將mark設置為真,表示可以畫圖。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
mark=.t.
Form1.MouseUp事件,將mark設置為假,表示不能畫圖。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
mark=.f.
Form1.MouseMove事件,移動鼠標連續畫圓。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if mark and bittest(nbutton,0)
thisform.circle(20,nxcoord,nycoord)
endi
實例二:利用鼠標事件切換圖標按鈕中的圖標。
COMMAND1控件的PICTURE屬性是C:\B.BMP
Form1.load事件,定義開關變量mouse_down。
public mouse_down
mouse_down=0
Form1.MouseDown事件,顯示鼠標按下時的圖標。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
THISFORM.COMMAND1.PICTURE="C:\A.BMP"
mouse_down=1
Form1.MouseUp 事件,顯示鼠標松開時的圖標。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
THISFORM.COMMAND1.PICTURE="C:\B.bmp"
Form1.MouseMove事件,判別鼠標是否離開圖形按鈕,若離開,則顯示松開時的圖標。
LPARAMETERS nButton, nShift, nXCoord, nYCoord
if mouse_down=1
if (nXCoord$#@60;0.or. nXCoord$#@62;thisform.command1.width) .or. (nYCoord$#@60;0 .or. nYCoord$#@62;thisform.command1.height)
THISFORM.COMMAND1.PICTURE="C:\B.BMP"
endi
endi
三.VISUAL BASIC應用實例:
實例一:給應用程序的命令按鈕加上提示行.
實現效果:用過WINDOWS OFFICE軟件的用戶,都非常熟悉這種情況,當你自己不
清楚軟件中所列出的圖標按鈕起什麼作用時, 可以把鼠標移到這個
圖標按鈕上,不一會兒在這圖標按鈕的下方會顯示一個簡短的文字提
示行,說明這個圖標按鈕的作用;當把鼠標從這個按鈕上移開後,提示
行立刻消失.
實現方法:
(1)建立含有如下控件的窗體:
控件 NAME CAPTION VISIBLE
窗體 BOTTON_DEMO 實例一:給應用程序的命令按鈕加上提示行程序窗口
命令按鈕 COMMAND1 TRUE
標簽 LABEL1 FALSE 顯示圖標按鈕作用的文字
(2)雙擊窗體,進入窗體裝入事件代碼窗口:
Private Sub Form_Load ( )
COMMAND1.Picture = LoadPicture("C:\README.ICO") 裝入圖片
End Sub
(3)當鼠標移到按鈕上方時,激活標簽顯示該圖標按鈕作用的文字.
雙擊圖標按鈕,進入命令按鈕MOUSEMOVE事件代碼窗口:
Private Sub Command1_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
LABEL1.BorderStyle = 1
LABEL1.BACKCOLOR =&H0000FFFF& 顯示文字的標簽框底色為黃色
LABEL1.Visible = True
LABEL1.CAPTION = "演 示"
End Sub
(4)當鼠標從按鈕上移開後,提示行文字立即消失.
雙擊窗體,進入窗體MOUSEMOVE事件代碼窗口:
Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
LABEL1.Visible = False
End Sub
實例二:互換鼠標的左右按鈕.
實現效果:當你的鼠標左鍵或右鍵不好時,通過調用WINDOWS API的SwapMouseButton()
函數,實現鼠標的左右鍵互換.
實現方法:
(1)建立含有如下控件的窗體:
控件 NAME CAPTION 窗體 SWAP_BUTT 實例二:鼠標的左右按鈕互換 程序窗口 命令按鈕 COMMAND1 鼠標的左右鍵互換 命令按鈕 COMMAND2 恢復原狀態 命令按鈕 COMMAND3 退出 命令按鈕 COMMAND4 清除標志 標簽 LABEL1 按下左按鈕:( ) 標簽 LABEL2 按下右按鈕:( ) 標簽 LABEL3 空 顯示按下標志 標簽 LABEL4 空(2)在目標文件列表(OBJECT)中選擇GENERAL,在過程列表(PROC)中選擇DECLARATIONS
(聲明),系統進入窗體級代碼的定義窗口中.輸入如下定義:
Private Declare Function SwapMouseButton Lib "USER32" Alias "SwapMouseButtonA" (ByVal BSWAP As Integer) As Integer
(3)雙擊窗體,進入MOUSEUP事件代碼窗口:
Private Sub Form_MouseUp (BUTTON As Integer, Shift As Integer, X As Single, Y As Single)
If BUTTON And &H111 Then
LABEL3.Caption = "√"
Else
LABEL4.Caption = "√"
End If
End Sub
(4)雙擊命令按鈕1,進入命令按鈕單擊事件代碼窗口:
Private Sub Command1_Click ()
Dim SWAP_BUTT As Integer
SWAP_BUTT = SWAPMOUSEBUTTON(-1) 互換鼠標的左右鍵
End Sub
(5)雙擊命令按鈕2,進入命令按鈕單擊事件代碼窗口:
Private Sub Command2_Click ()
Dim SWAP_BUTT As Integer
SWAP_BUTT = SWAPMOUSEBUTTON(0) 恢復鼠標的原狀態
End Sub
(6)雙擊命令按鈕3,進入命令按鈕單擊事件代碼窗口:
Private Sub Command4_Click ()
LABEL3.Caption = " "
LABEL4.Caption = " "
End Sub
(7)雙擊退出按鈕,進入命令按鈕單擊事件代碼窗口:
Private Sub Command3_Click ()
End
End Sub
以上程序在WINDOWS98,VISUAL FOXPRO 6.0,VISUAL BASIC 6.0環境下運行通過.