bubble44
Messages postés200Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention 3 août 2004
-
4 juil. 2004 à 10:57
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 2009
-
4 juil. 2004 à 16:43
Tout est dans le titre lol, 1ere idee que j'avais testé c'est de tester le mousemove dans la picturebox, et le mousemove dans la form, et si ca bouge dans la form c'est que c'est un mouseout dans la picturebox, cependant si la form est noyé de frames etc ... ca devient complexe de savoir qui recoit le mousemove ailleur que dans la picturebox pour en deduire un mouseout dans la picturebox.
Bref, y a vraiment rien pour trapper tous les evenements souris, comme une sorte de Timer ? sans 10 mille lignes de code et ocx ?. La ca permetterait de tester si apres qqs calculs on serait pas sur la picturebox par hasard.
Ou c'est vraiment Vb qui est pauvre.
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 4 juil. 2004 à 12:28
Effectivement je voit pas d 'event permettant de faire cela, mais je ne vois pas ou et le prob si tu ne colle pas ta PB avec un autre controle tu repasse automatiquement avec la souris sur le form donc !!!!!!
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1 = "Hors de la pictureBox"
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1 = "Sur la pictureBox"
End Sub
bubble44
Messages postés200Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention 3 août 2004 4 juil. 2004 à 12:35
Sauf que cette methode est pas souple, genre ta picturebox peut etre dans une frame, ou des choses bien speciales comme controle, bref l'evenement form_mousemove est jamais appelé.
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 juil. 2004 à 14:32
Salut ;O)
Voici un code relativement simple. Un copier-coller suffira a faire fonctionner le tout.
A placer dans une nouvelle Class (ClsMouseOver)
'____________DEBUT DE LA CLASSE_________________
Option Explicit
Private intBorder As Integer ' To hold the borderstyle of the current form
Private RelativeObjectX ' Hold the X pos of the object
Private RelativeObjectY ' Hold the Y pos of the object
Private MousePos As POINTAPI ' To gather the mouse position
Private Const OffsetX = 3 ' The offset when there is a border round the form
Private Const OffsetY = 22 ' The offset when there is a title bar on the form
Private Type POINTAPI ' Type to retieve mouse position
x As Long
y As Long
End Type
' Declare API call to get mouse position
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
' To setup the correct border style
Public Sub SetBorderStyle(intBorderStyle As Integer)
intBorder = intBorderStyle
End Sub
' Detect if the mouse if over the given object on the give form
Public Function IsMouseOver(frmHost As Form, objSubject As Object)
' Work out the relative position of the object in question
Select Case intBorder
' Has title bar and border
RelativeObjectX = ((frmHost.Left + objSubject.Left) / Screen.TwipsPerPixelX) + OffsetX
RelativeObjectY = ((frmHost.Top + objSubject.Top) / Screen.TwipsPerPixelY) + OffsetY
End Select
' Call API to get mouse position
GetCursorPos MousePos
' See if mouse lays with the boundaries of the object
If (MousePos.x >= RelativeObjectX And MousePos.x <= RelativeObjectX + (objSubject.Width / Screen.TwipsPerPixelX)) And (MousePos.y >= RelativeObjectY And MousePos.y <= RelativeObjectY + (objSubject.Height / Screen.TwipsPerPixelY)) Then
IsMouseOver = True
Else
IsMouseOver = False
End If
End Function
'____________FIN DE LA CLASSE_________________
A placer dans un formulaire :
Placer une picturebox(Picture1), un label (Label1) et un timer(Timer1)
'____________DEBUT DU FORMULAIRE_________________
Option Explicit
' Create instance of new MouseOver Class
Private clsMouser As New clsMouseOver
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 juil. 2004 à 16:43
En effet, le Timer c'est jamais très 'PRO', mais vu que tu cherchais plutôt la facilité...
Sinon, Y a les Hook avec les API, mais là c'est la grosse artillerie...