Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 10 nov. 2004 à 13:09
A quoi servent les parametre x et y ???
Private Function Hittest(X As Single, Y As Single) As Boolean
Dim pnt As POINT_API
Dim rBox As RECT
GetWindowRect hwnd, rBox 'get the control's rectangle relative to screen
GetCursorPos pnt
'is it over the button?
If PtInRect(rBox, pnt.X, pnt.Y) Then
Hittest = True
Else
If m_bFocused Then m_State xp_Focused Else m_State xp_Normal
End If
End Function
Morricon
Messages postés41Date d'inscriptionlundi 23 décembre 2002StatutMembreDernière intervention 1 mars 2007 24 oct. 2003 à 17:29
Sympha ton contrôle... Une bonne source pleine d'idée...
cs_Matt
Messages postés34Date d'inscriptionlundi 17 décembre 2001StatutMembreDernière intervention29 novembre 2005 20 août 2002 à 19:59
10/10
KrocLeBo
Messages postés18Date d'inscriptionjeudi 7 juin 2001StatutMembreDernière intervention19 avril 2010 28 févr. 2002 à 06:48
Excellent.
Par contre, juste une petite modif dans le controle pour éviter que celui-ci se redessine tant que la souris bouge dessus (effet visuel pas très beau) :
Remplacer l'evennement original MouseMove par celui-ci :
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SetCapture hwnd
If Hittest(X, Y) Then
If Button = vbLeftButton And m_bFocused Then
m_State = xp_Pressed
Make_xpButton
Else
If m_State <> xp_Hovered Then
m_State = xp_Hovered
Make_xpButton
End If
End If
RaiseEvent MouseMove(Button, Shift, X, Y)
Else
Make_xpButton
ReleaseCapture
RaiseEvent MouseOut
End If
End Sub
Les modifs sont les suivantes :
Dans la partie ou Hittest(X, Y) est vrai, j'ai rajouté le test If m_State <> xp_Hovered Then qui permet de ne pas repasser dessus si le bouton est déjà en Hovered.
Ensuite la procédure de dessin du bouton Make_xpButton à été déplacée et répétée dans chaque test pour ne l'appeler que si nécessaire.
Skywalker13
Messages postés111Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention27 août 2004 25 févr. 2002 à 20:49
Y a un petit défaut dans la logique de control.
Si le bouton n'a pas le focus.. (cad n'est pas entouré de bleu), l'affichage du bouton pressé n'apparait pas et seul le contour bleu s'installe.
Contrairement au cas où le contour bleu du focus est présent, l'affichage de la pression s'effectue.
Dans XP l'affichage de la pression se fait dans tous les cas..
cs_Khrys
Messages postés5Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention25 février 2002 25 févr. 2002 à 18:35
Excellent
Manque juste la posibilité de mettre une image et de deplacer le texte (gauche, bas, droite, haut) ... mais je ressouds ça et poste pour que tlm en profite
cs_Nox
Messages postés415Date d'inscriptionmardi 3 avril 2001StatutMembreDernière intervention26 avril 2008 24 févr. 2002 à 20:12
tlm cherche le moyen de faire ca... jai pas xp et jai pas essayé mais est-ce qu'on peut faire des captures d'écrans ??? si oui ben c long mais on copie l'image des bouttons!!
tk jessairai quand je l'aurai ;p
10/10 ton source ;)
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 24 févr. 2002 à 18:01
Effectivement c'est pas mauvais du tout, sa vaux bien 10/10
@+ Bonne prog
CladStrife
Messages postés4Date d'inscriptiondimanche 24 février 2002StatutMembreDernière intervention26 février 2002 24 févr. 2002 à 17:23
10 nov. 2004 à 13:09
Private Function Hittest(X As Single, Y As Single) As Boolean
Dim pnt As POINT_API
Dim rBox As RECT
GetWindowRect hwnd, rBox 'get the control's rectangle relative to screen
GetCursorPos pnt
'is it over the button?
If PtInRect(rBox, pnt.X, pnt.Y) Then
Hittest = True
Else
If m_bFocused Then m_State xp_Focused Else m_State xp_Normal
End If
End Function
24 oct. 2003 à 17:29
20 août 2002 à 19:59
28 févr. 2002 à 06:48
Par contre, juste une petite modif dans le controle pour éviter que celui-ci se redessine tant que la souris bouge dessus (effet visuel pas très beau) :
Remplacer l'evennement original MouseMove par celui-ci :
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SetCapture hwnd
If Hittest(X, Y) Then
If Button = vbLeftButton And m_bFocused Then
m_State = xp_Pressed
Make_xpButton
Else
If m_State <> xp_Hovered Then
m_State = xp_Hovered
Make_xpButton
End If
End If
RaiseEvent MouseMove(Button, Shift, X, Y)
Else
Make_xpButton
ReleaseCapture
RaiseEvent MouseOut
End If
End Sub
Les modifs sont les suivantes :
Dans la partie ou Hittest(X, Y) est vrai, j'ai rajouté le test If m_State <> xp_Hovered Then qui permet de ne pas repasser dessus si le bouton est déjà en Hovered.
Ensuite la procédure de dessin du bouton Make_xpButton à été déplacée et répétée dans chaque test pour ne l'appeler que si nécessaire.
25 févr. 2002 à 20:49
Si le bouton n'a pas le focus.. (cad n'est pas entouré de bleu), l'affichage du bouton pressé n'apparait pas et seul le contour bleu s'installe.
Contrairement au cas où le contour bleu du focus est présent, l'affichage de la pression s'effectue.
Dans XP l'affichage de la pression se fait dans tous les cas..
25 févr. 2002 à 18:35
Manque juste la posibilité de mettre une image et de deplacer le texte (gauche, bas, droite, haut) ... mais je ressouds ça et poste pour que tlm en profite
24 févr. 2002 à 20:12
tk jessairai quand je l'aurai ;p
10/10 ton source ;)
24 févr. 2002 à 18:01
@+ Bonne prog
24 févr. 2002 à 17:23