[VB6] MOLETTE SOURIS POUR DATAGRID, MSFLEXGRID ET MSHFLEXGRID

Signaler
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
-
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
-
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/25201-vb6-molette-souris-pour-datagrid-msflexgrid-et-mshflexgrid

Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
3
Bonjour,
Super source, merci beaucoup.

Par contre j'ai un problème; J'ai réussi à la mettre en place sur une de mes Form, mais pas sur une autre. Je ne sais pas quelle peut être la différence entre mes 2 Form. J'ai bien copié les lignes dans la Déclaration, Initialise, Terminate et ISubclasser_WindowProc en changeant les noms des Form et DataGrid. Mais ça ne fonctionne pas :(

Une idée d'où ça peut venir ?
Merci d'avance
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
à lermite : bien vue et merci ! Je modifierai ma source suivant tes modifs à l'occasion. Concernant ta question, plus d'infos sur msdn :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
1
Ça fonctionne impec aussi en compiler.
J'ai un peu améliorer la sélection, je trouvais dommage de devoir cliquer sur le contrôle pour que le scroll fonctionne.
La constante WM_MOUSEFIRST permet de savoir si la souris survole le contrôle, j'ai donc modifié en ce sens...
Ajouter 3 variables dans la déclaration de la forme

Private mHwnd1 As Long 'mémorise le hwnd des contrôles pour les activés
Private mHwnd2 As Long
Private mHwnd3 As Long

dans la procédure Form_Initialize() j'ai ajouter
mHwnd1 = DataGrid1.hwnd
mHwnd2 = MSFlexGrid1.hwnd
mHwnd3 = MSHFlexGrid1.hwnd
et dans la fonction ISubclasser_WindowProc
Static MMhwnd As Long
If uMsg = WM_MOUSEFIRST Then
If MMhwnd <> hwnd Then
Select Case hwnd
Case mHwnd1: DataGrid1.SetFocus
Case mHwnd2: MSFlexGrid1.SetFocus
Case mHwnd3: MSHFlexGrid1.SetFocus
End Select
MMhwnd = hwnd
End If
Exit Function
End If
De cette façon la roulette agit sur le contrôle survoler. (je trouve plus pratique)
Juste un tit problème, ça fonctionne pas sur le premier contrôle tant que l'ont n'a pas cliquer une fois dessus ? et j'ai pas trouvé pourquoi.
Pour l'erreur des scroll, bien que j'aime pas tellement ça, j'ai mis un On Error Resume Next.
J'ai aussi ajouter 2 constantes dans l'Enum
WM_MOUSEGAUCHEDROIT = &H20E 'Roulette à gauche et droite
WM_MOUSEBUTTONSUPP = &H20B 'Boutons supplémentaires 4 et 5 de la souris
avec deux constantes pour wParam (pas dans l'Enum)
Public Const BUTTONSUPLEFT = &H20 'Valeur de wParam pour différencier les 2 boutons
Public Const BUTTONSUPRIGHT = &H40 'supplémentaires voir WM_MOUSEBUTTONSUPP

Y aurait-il un lien qui donne une explication sur toutes les constantes ?
Leurs utilités et fonctionnement. ?
En tout cas, c'est nickel, merci également à RendField pour la classe.
A+
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
1
Bonjour,
Parfait, enfin presque, il faudrait contrôler les valeurs renvoyées aux scroll, tombe très vite en erreur au déplacement de la molette.
Mais ça je pense que c'est à la portée de tous.
A part ça tu est trop modeste, c’est valable pour tout contrôles ayant un hwnd, y compris la forme.
Egalement utile pour détecter tout les boutons de la souris.
Bravo et merci.
A+
PS: pas encore tester en compiler.
Afficher les 47 commentaires