MouseOut Event pour PictureBox ???!

bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 3 août 2004 - 4 juil. 2004 à 10:57
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Derniè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.

'-/

7 réponses

pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
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

???
0
bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Derniè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é.

'-/
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
4 juil. 2004 à 12:36
Ben tu n'a qua utiliser celui de la frame si la pb se trouve dedans?????? ou autres si elle dans un autre controle!!!!!
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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

Case 0

' Plain form
RelativeObjectX = ((frmHost.Left + objSubject.Left) / Screen.TwipsPerPixelX)
RelativeObjectY = ((frmHost.Top + objSubject.Top) / Screen.TwipsPerPixelY)

Case Else

' 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

Private Sub Form_Load()

Me.Timer1.Interval = 10
' Setup Borderstyle
clsMouser.SetBorderStyle Me.BorderStyle

End Sub

Private Sub Timer1_Timer()

' Use class to test if mouse is over the Picture Control
If clsMouser.IsMouseOver(Me, Picture1) Then

Label1.BackColor = vbRed

Else

Label1.BackColor = vbGreen

End If

End Sub

'____________FIN DU FORMULAIRE_________________

J'espère que cela pourra répondre à ton besoin.

Guy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 3 août 2004
4 juil. 2004 à 15:19
Je vais essayer cher Guy BillGate, en general j'aime pas trop les timers mais si c'est pratique je ferais sans doute une exception.

=)))

Merci
0
bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 3 août 2004
4 juil. 2004 à 16:11
Ca me plait plutot bien en effet, car c'est tres simple a utiliser.

-----------------------
J'ai juste rajouté un :
-----------------------

Me.Timer1.Enabled = False

dans Form_Load()

----
ca :
----

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Me.Timer1.Enabled = True

End Sub

-----------------
et en enfin je
recoupe le timer
dans Timer1_Timer()
en dessous de
Label1.BackColor = vbGreen
-----------------

..
Label1.BackColor = vbGreen
Me.Timer1.Enabled = False
...

parfais ! merci.
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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...
0
Rejoignez-nous