|
|
|
|
|
Dicas
|
|
Visual Basic (Mouse/Teclado)
|
|
|
Título da Dica: Capturar a Posição do Mouse
|
|
|
|
Postada em 14/8/2000 por Webmaster
webmaster@vbweb.com.br
Para saber se o mouse está sobre um objeto ou não, podemos usar de duas formas:
USANDO AS APIs GetCursorPos E WindowFromPoint:
'Use um Timer e proceda da seguinte forma:
'No Declarations Private Declare Function GetCursorPos Lib "user32" _ (lpPoint As POINTAPI) As Long Private Declare Function WindowFromPoint Lib _ "user32" (ByVal xPoint As Long, ByVal _ yPoint As Long) As Long
Private Type POINTAPI X As Long Y As Long End Type
Private Controle_MouseMove(...) Timer1.Enabled = True 'O mouse está sobre o controle End Sub
Private Sub Timer1_Timer() Dim P as POINT If GetCursorPos(P) Then If WindowFromPoint(P.X, P.Y) <> Controle.hWnd then Timer1.Enabled = False 'O mouse NÃO está mais sobre o controle End If End If End Sub
USANDO AS APIs SetCapture E ReleaseCapture: Verificando se o cursor do mouse está ou não sobre o Form:
'Coloque num form um CommandButton e dois Labels.
'No Declarations Private Declare Function SetCapture Lib "user32" _ Alias "SetCapture" (ByVal hwnd As Long) _ As Long Private Declare Function ReleaseCapture Lib _ "user32" Alias "ReleaseCapture" () As Long
Private Sub Form_Load() SetCapture Me.Hwnd End Sub
Private Sub Command1_Click() ReleaseCapture End Sub
Private Sub Form_MouseMove(Button As Integer, Shift _ As Integer, X As Single, Y As Single) Label1.Caption = X Label2.Caption = Y End Sub Quando você executar, perceberá que, mesmo que o mouse não esteja sobre o Form, os Labels serão atualizados com as posições X e Y do mouse quando você o mover. Quando você clicar no CommandButton ele irá parar de detectar o mouse quando ele estiver fora do Form (o ReleaseCapture "desliga" o SetCapture).
Verificando se o cursor do mouse está ou não sobre um controle:
'Coloque num form um CommandButton, dois Labels e 'um PictureBox.
'No Declarations Private Declare Function SetCapture Lib "user32" _ Alias "SetCapture" (ByVal hwnd As Long) _ As Long Private Declare Function ReleaseCapture Lib _ "user32" Alias "ReleaseCapture" () As Long
Private Sub Form_Load() SetCapture Picture1.Hwnd End Sub
Private Sub Command1_Click() 'Para de detectar o mouse no form todo. ReleaseCapture End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift _ As Integer, X As Single, Y As Single) If X > -1 And X < Picture1.Width And Y > -1 And Y < _ Picture1.Height Then Picture1.BackColor = vbRed Else Picture1.BackColor = vbBlack EndIf End Sub Quando você executar, perceberá que, quando o mouse estiver sobre o PictureBox ele ficará vermelho e quando não estiver ficará preto. Quando você clicar no CommandButton ele irá parar de detectar o mouse quando ele estiver fora do PictureBox (o ReleaseCapture "desliga" o SetCapture). Então, ele não ficará mais preto, pois o VB não detectará mais quando o mouse "sair" do PictureBox...
|
|
|
|
|