|
Come evidenziare i tab al passaggio del
mouse Per evidenziare i Tab di un TabStrip si può far riferimento alla
proprietà HighLighted di un Item di un Tab; l'esempio che segue mostra come inserendo nel
form un controllo TabStrip, sia possibile sfruttare questa proprietà al fine di
evidenziare gli item al passaggio del mouse.
Private Declare Function SetCapture Lib "user32"
(ByVal hwnd As Long) As long
Private Declare Function ReleaseCapture Lib
"user32" () As Long
Private Sub TabStrip1_MouseMove(Button As Integer,
Shift As Integer, x As
single, y As Single)
SetCapture TabStrip1.hwnd
Dim i As Integer
Dim release As Boolean
release = True
For i = 1 To TabStrip1.Tabs.Count
If (x > TabStrip1.Tabs.Item(i).Left And _
x < (TabStrip1.Tabs.Item(i).Left +
TabStrip1.Tabs.Item(i).Width)) And
(y > TabStrip1.Tabs.Item(i).Top And
y < (TabStrip1.Tabs.Item(i).Top +
TabStrip1.Tabs.Item(i).Height)) Then
TabStrip1.Tabs.Item(i).HighLighted = True
release = False
' HIT TEST ok: non rilascia il mouse
Else
TabStrip1.Tabs.Item(i).HighLighted = False
End If
Next i
If release Then
ReleaseCapture
End If
|
Check Mousebutton
If Button = 1 Then MsgBox "Hai premuto il tasto sinistro"
If Button = 2 Then MsgBox "Hai premuto il tasto destro"
If Button = 3 Then MsgBox "Hai premuto entrambi i tasti"
If Button = 4 Then MsgBox "Hai premuto il tasto in mezzo" |
Come nascondere o mostrare il pulsante del
mouse
Declare Function ShowCursor Lib "User
32"(ByVal bShow As Long) As Long
Public IShowCursor As Long
Public IRet As Long
Public Sub HideMouse( )
Do
IShowCursor = IShowCursor -1
IRet = ShowCursor (False)
Loop Until IRet < 0
End Sub
Public Sub ShowMouse ( )
Do
IShowCursor = IShowCursor - 1
IRet = ShowCursor (True)
Loop Until IRet >=0 |
Determinare la presenza del mouse destro o
sinistro
Declare Function GetSystemMetrics Lib "user32" Alias
"GetSystemMetrics" (ByVal nIndex As Long) As Long
con la seguente costante:
Const SM_SWAPBUTTON = 23
La funzione GetSystemMetrics restituisce (in base allindice usato nella chiamata)
informazioni sul sistema e sulla sua configurazione. Utilizzandola, come in questo caso,
per determinare se i pulsanti del mouse sono stati invertiti, è necessario richiamarla
impostando come indice (nIndex) la costante SM_SWAPBUTTON.
Esempio
Function PulsantiScambiati() As Boolean
PulsantiScambiati = GetSystemMetrics(SM_SWAPBUTTON) <> 0
End Function
La funzione, PulsantiScambiati, restituirà True (vero), se lutilizzatore del
sistema ha invertito la logica dei due pulsati, oppure False (falso), in caso contrario. |
Determinare la posizione del mouse
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos"
(lpPoint As POINTAPI) As Long
Con la variabile del tipo POINTAPI:
Type POINTAPI
x As Long
y As Long
End Type
La funzione GetCursorPos restituisce in una variabile di tipo definito dallutente
denominata POINTAPI le coordinate x,y relative allangolo superiore a sinistra dello
schermo.
Esempio
Sub PosizioneScreenMouse()
Dim Posizione As POINTAPI
Dim PuntoX As Integer
Dim PuntoY As Integer
GetCursorPos Posizione
'per ricavare la posizione x e y
PuntoX = Posizione.x'coordinata del punto x
PuntoY = Posizione.y'coordinata del punto y
End Sub
GetCursorPos da la posizione del cursore , rispetto allangolo superiore sinistro
dello schermo. Se si desidera conoscere la posizione del mouse, relativamente al
form in uso si deve convertire i valori con:
Declare Function ScreenToClient Lib "user32" Alias "ScreenToClient"
(ByVal hwnd As Long, lpPoint As POINTAPI) As Long
La funzione ScreenToClient converte le coordinate x,y, ricavate con la funzione
GetCursorPos, nelle coordinate relative allangolo superiore sinistro di un form
specificato.
Esempio
Sub PosizioneWindowMouse()
Dim Posizione As POINTAPI
Dim PuntoX As Integer
Dim PuntoY As Integer
GetCursorPos Posizione'restituisce la posizione x,y relativamente allo schermo
ScreenToClient Me.hWnd, Posizione 'converte la posizione x,y relativamente al form
specificata (.hWnd)
'per ricavare la posizione x e y
PuntoX = Posizione.x'coordinata del punto x relativa al form corrente
PuntoY = Posizione.y'coordinata del punto y relativa al form corrente
End Sub
le due funzioni, GetCursorPos e ScreenToClient, restituiscono la posizione del mouse con
valori espressi in pixel. Per convertire i valori in Twip :
PuntoX = Posizione.x * Screen.TwipsPerPixelX
PuntoY = Posizione.y * Screen.TwipsPerPixelY
|
Determinare il numero dei pulsanti del
mouse
Declare Function GetSystemMetrics Lib "user32" Alias
"GetSystemMetrics" (ByVal nIndex As Long) As Long
con la seguente costante:
Const SM_CMOUSEBUTTONS = 43
La funzione GetSystemMetrics retituisce (in base allindice usato nella chiamata)
informazioni sul sistema e sulla sua configurazione. Utilizzandola, come in questo caso,
per determinare il numero dei pulsanti del mouse, è necessario richiamarla impostando
come indice (nIndex) la costante SM_CMOUSEBUTTONS.
Esempio:
Function NumeroTasti() As Integer
NumeroTasti = GetSystemMetrics(SM_CMOUSEBUTTONS)
End Function
La funzione, NumeroTasti, restituirà il numero dei tasti presenti, oppure zero (0), nel
caso non sia installato il mouse. |
Limitare lo
spostamento del mouse
Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT)
As Long
Con la variabile di tipo definito dallutente di nome RECT:
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
La funzione ClipCursor limita lo spostamento del mouse in una determinata zona dello
schermo specificata in una variabile di tipo definito dallutente ( RECT).
La funzione GetWindowRect trova i 4 vertici (Left,Top,Right,Bottom) del perimetro
della zona nella quale si vuole bloccare il mouse.
La variabile di tipo definito dallutente denominata RECT viene usata per contenere i
valori relativi alla posizione Left , Top, Right e Bottom di un finestra
rettangolare.
Esempio
Sub BloccaMouse()
Dim Perimetro As RECT' variabile che contiene i valori dei quattro vertici della zona in
cui limitare lo spostamento del cursore
GetWindowRect Form1.hwnd, Perimetro'ricava larea del form in cui limitare lo
spostamento del mouse
ClipCursor Perimetro' imposta la zona entro la quale è possibile spostare il cursore
End Sub
In ugual modo è possibile, cambiando il riferimento, bloccare il cursore allinterno
di un qualsiasi altro controllo che dispone della proprietà hWnd come per esempio un
CommandButton.
Per ricavare le coordinate della zona dello schermo in cui si è limitato il movimento del
muose, si usa funzione API:
Declare Function GetClipCursor Lib "user32" (lprc As RECT) As Long
La funzione GetClipCursor restituisce, in una variabile di tipo definito dallutente
denominata RECT, le coordinate relative ( in pixel ) ai quattro punti
(Left,Top,Right,Bottom) della zona in cui è bloccato il cursore del mouse.
Esempio
Sub GetArea()
Dim Perimetro As RECT
Dim Superiore As Integer
Dim Inferiore As Integer
Dim Destro As Integer
Dim Sinistro As Integer
GetClipCursor Perimetro'ricava le coordinate relative ai quattro vertici della zona
bloccata
Superiore = Perimetro.Top' vertice superiore in pixel
Inferiore = Perimetro.Bottom'vertice inferiore in pixel
Destro = Perimetro.Right'vertice destro in pixel
Sinistro = Perimetro.Left'vertice sinistro in pixel
End Sub
Per annullare la restrizione imposta, si usa la seguente funzione API
Declare Function GetDesktopWindow Lib "user32" () As Long
La funzione GetDesktopWindow restituisce lhandle del desktop che verrà usato dalla
funzione GetWindowRect e ClipCursor per impostare come area disponibile lintero
schermo.
Esempio:
Private Sub SbloccaMouse()
Dim Perimetro As RECT
GetWindowRect GetDesktopWindow(), Perimetro
ClipCursor Perimetro
End Sub
se si limita lo spostamento del mouse, tale restrizione avrà effetto su tutto il sistema
non solo nel programma che si sta usando. Quindi è indispensabile prevedere sempre
unopportuna routine che annulli, in ogni caso questa limitazione.
|
Identificare la finestra che si trova sotto
al mouse
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos"
(lpPoint As POINTAPI) As Long
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal
yPoint As Long) As Long
Utilizzando la seguente variabile del tipo POINTAPI:
Type POINTAPI
x As Long
y As Long
End Type
La funzione GetCursorPos restituisce, in una variabile di tipo definito dallutente
denominata POINTAPI, le coordinate x,y della posizione del mouse, relative allangolo
superiore sinistro dello schermo.
La funzione WindowFromPoint restituisce lhandle (hWnd) della finestra che si trova
in corrispondenza delle coordinate x,y specificate nellargomento usato per la
chiamata.
Esempio
Function WindowHandle() As Long
Dim Pos As POINTAPI
GetCursorPos Pos 'restituisce la posizione x,y del cursore del mouse (in pixel)
WindowHandle = WindowFromPoint(Pos.x, Pos.y) 'restituisce lhandle della finestra che
si trova in corrispondenza di: Pos.x, Pos.y
End Function
La funzione WindowHandle restituirà lhandle (hWnd) di qualunque finestra (anche se
questa non appartiene alla propria applicazione) che si trova sotto al cursore del mouse.
Il seguente codice di esempio, permette di ricavare tutti gli handle degli oggetti
presenti nel vostro desktop:
Private Sub Timer1_Timer() 'proprietà interval = 100
Label1. Caption = WindowHandle 'visualizza lhandle delloggetto sopra a cui si
trova il cursore del mouse
End Sub
Function WindowHandle() As Long
Dim Pos As POINTAPI
GetCursorPos Pos 'restituisce la posizione x,y del cursore del mouse (in pixel)
WindowHandle = WindowFromPoint(Pos.x, Pos.y)
End Function
la funzione, GetCursorPos , restituisce la posizione del mouse con valori espressi in
pixel. Per convertire tali valori in Twip usare le seguenti istruzioni:
PuntoX = Pos.x * Screen.TwipsPerPixelX
PuntoY = Pos.y * Screen.TwipsPerPixelY |
Impostare un nuovo valore di tempo per il
doppio clic del mouse
Function SetDoubleClickTime Lib "user32" (ByVal wCount As Long) As Long
La funzione SetDoubleClickTime permette di impostare lintervallo del valore di
doppio clic del mouse.
Esempio
Function DoubleClickNewTime(wCount as Long)
SetDoubleClickTime wCount
End Function
Richiamare la funzione DoubleClickNewTime passando come argomento, wCount, il valore,
espresso in millisecondi, del tempo che si vuole impostare per lintervallo del
doppio clic.
Call DoubleClickNewTime(2000)
Nota. Questa modifica del doppio clic ha effetto su tutto il sistema. |
Invertire i pulsanti del mouse
Declare Function SwapMouseButton Lib "user32" (ByVal bSwap As Long) As Long
Function InvertiPulsanti(bSwap As Boolean)
SwapMouseButton bSwap
End Function
InvertiPulsanti(True) : per invertire .
InvertiPulsanti(False) : per ripristinare. |
Verificare
la presenza del mouse
Per verificare la presenza del mouse è necessario usare
la seguente dichiarazione API:
Declare Function GetSystemMetrics Lib "user32" Alias
"GetSystemMetrics" (ByVal nIndex As Long) As Long
con la seguente costante:
Const SM_MOUSEPRESENT = 19
La funzione GetSystemMetrics restituisce (in base allindice usato nella chiamata)
informazioni sul sistema e sulla sua configurazione. Utilizzandola, come in questo caso,
per determinare la presenza del mouse, è necessario richiamarla impostando come indice
(nIndex) la costante SM_MOUSEPRESENT.
Lesempio di codice seguente, mostra come richiamare la funzione:
Function MouseInstallato() As Boolean
MouseInstallato = GetSystemMetrics(SM_MOUSEPRESENT) = 1
End Function
La funzione, MouseInstallato, restituirà True (vero) se il mouse è installato, oppure
False (falso), se non ci sono mouse installati nel sistema. |
|