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 :(
Ç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+
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.
1 mai 2016 à 19:02
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
12 août 2012 à 18:20
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx
12 août 2012 à 14:44
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+
11 août 2012 à 13:19
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.
2 juin 2012 à 22:16
Tous les commentaires avant 2011 concernent l'ancienne version.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.