DES BOUTONS A LA XP

CladStrife Messages postés 4 Date d'inscription dimanche 24 février 2002 Statut Membre Dernière intervention 26 février 2002 - 24 févr. 2002 à 17:23
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 10 nov. 2004 à 13:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2683-des-boutons-a-la-xp

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Derniè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és 34 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 29 novembre 2005
20 août 2002 à 19:59
10/10
KrocLeBo Messages postés 18 Date d'inscription jeudi 7 juin 2001 Statut Membre Dernière intervention 19 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és 111 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 27 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és 5 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 25 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és 415 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 26 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és 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Derniè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és 4 Date d'inscription dimanche 24 février 2002 Statut Membre Dernière intervention 26 février 2002
24 févr. 2002 à 17:23
Put1 ça c'est du bon ! 10 / 10
Rejoignez-nous