Savoir si la souris est dessus un objet

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 220 fois - Téléchargée 66 fois

Contenu du snippet

tout est à mettre dans un Form

Source / Exemple :


Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal Hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Dim VarPointAPI As POINTAPI
Dim VarObjRect As RECT

Private Function IsOnObject(Hwnd As Long) As Boolean
GetCursorPos VarPointAPI
GetWindowRect Hwnd, VarObjRect

If VarPointAPI.x > VarObjRect.Left And _
VarPointAPI.x < VarObjRect.Right And _
VarPointAPI.y > VarObjRect.Top And _
VarPointAPI.y < VarObjRect.Bottom Then
IsOnObject = True
Else
IsOnObject = False
End If

End Function

Conclusion :


La fonction renvoie True si la souris est dessus ou False si elle n'y est pas
L'avantage d'utiliser cette méthode (plutot que Form_mousemove) est que si l'objet en question est sur une feuille avec parmi plein d'autre, la souris peut sauter sur un autre objet sans être passer par dessus la feuille.

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
euh....
tout est là :

la fonction se nomme IsOnObject
elle renvoie un boolean (Vrai/Faux)

d'après son nom, on peux dire qu'elle renvoie vrai si le curseur de la souris est au dessus de l'objet...

l'objet en question ? celui dont on passe le hwnd (via le parametre du même nom)

tout ça pour dire :

If IsOnObject ( Command1.hWnd ) Then
MsgBox "le curseur de la souris est au dessus de mon bouton Command1"
End If


PS: si tu trouve que je réponds assez sèchement, c'est bien le cas.
je n'aime pas le ton que tu prend ni ton syle SMS, qui est à proscrire, d'ailleurs (cf. la charte de bonne conduite, ci-dessous)
cs_Titant
Messages postés
103
Date d'inscription
mardi 2 juillet 2002
Statut
Membre
Dernière intervention
21 juillet 2008
-
C kler koi mettez un exemple les mec c bien de mettre la function mais si on connais pas la command pour l'utiliser ca sert a rien !
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
Code non optimisé.....

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal Hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long

Private Function IsOnObject(Hwnd As Long) As Boolean
Dim VarPointAPI As POINTAPI
Dim VarObjRect As RECT

GetCursorPos VarPointAPI
GetWindowRect Hwnd, VarObjRect

IsOnObject = (PtInRect(VarObjRect, VarPointAPI.x, VarPointAPI.y) <> 0)
End Function



ou encore mieux :

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 Function IsOnObject(Hwnd As Long) As Boolean
Dim Pt As POINTAPI: GetCursorPos Pt

IsOnObject (WindowFromPoint(Pt.x, Pt.y) Hwnd)
End Function
rnosat
Messages postés
132
Date d'inscription
mardi 31 octobre 2000
Statut
Membre
Dernière intervention
2 mai 2004
-
euh ... ca doit marcher nickel , mais comment utiliser la fonction ?

dans un timer ?
avec par ex pour une form :

if IsOnObject form1= then
' action
else
' pas d'action

c'est ca ?
Rnosat
cs_lilie
Messages postés
12
Date d'inscription
lundi 18 février 2002
Statut
Membre
Dernière intervention
25 juillet 2002
-
nickel!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.