Molette Souris et MshFlexgrid1.Toprow

Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 7 août 2012 à 17:20
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 8 août 2012 à 11:32
Bonjour,


J'utilise la molette de la souris dans un contrôle MSHflexgrid pour déplacer le Texte sur le haut ou sur le bas. J'utilise la propriéte MSHflexgrid.Toprow à cet effet.

Exemple: If Objet.TopRow < Objet.Rows - 1 Then Objet.TopRow = Objet.TopRow + LIGNESROULETTE


Public Function GetMsgProc(ByVal nCode As Long, ByVal wParam As Long, lParam As MSG) As Long
Dim PosX As Long
Dim PosY As Long

If lParam.message = WM_MOUSEWHEEL Then
If Objet.Rows = Objet.FixedRows Then Exit Function

Feuille.ScaleMode = 3
PosX = lParam.pt.x - Feuille.ScaleX(Feuille.Left, vbTwips, vbPixels)
PosY = lParam.pt.y - Feuille.ScaleY(Feuille.Top, vbTwips, vbPixels)

'On se trouve à l'intérieur de l'Objet
If PosX > Objet.Left And PosX < (Objet.Left + Objet.Width) And _
PosY > Objet.Top And PosY < (Objet.Top + Objet.Height) Then

If lParam.wParam > 0 Then
' On est en haut de la feuille
If Objet.TopRow - LIGNESROULETTE <= Objet.FixedRows Then
Objet.TopRow = Objet.FixedRows
Feuille.ScaleMode = 1
Exit Function
End If

[b] If Objet.TopRow > Objet.FixedRows Then Objet.TopRow = Objet.TopRow - LIGNESROULETTE
Else

If Objet.TopRow + LIGNESROULETTE < Objet.Rows - 1 Then _
If Objet.TopRow < Objet.Rows - 1 Then Objet.TopRow = Objet.TopRow + LIGNESROULETTE
End If/b
End If
Feuille.ScaleMode = 1

End If

GetMsgProc = CallNextHookEx(Ihook, nCode, wParam, lParam)
End Function

Public Sub OpenHook(Parm1 As Form, Parm2 As MSHFlexGrid)
If LIGNESROULETTE 0 Then LIGNESROULETTE 1
Set Objet = Parm2
Set Feuille = Parm1
Ihook = SetWindowsHookEx(WH_GETMESSAGE, AddressOf GetMsgProc, App.hInstance, App.ThreadID)
End Sub

Public Sub CloseHook()
UnhookWindowsHookEx Ihook
Set Objet = Nothing
Set Feuille = Nothing
End Sub



Problème:

- Lorsque LignesRoulette est à la valeur 1, le déplacement se fait sur 3 Lignes au lieu de 1
- Lorsque LignesRoulette est à la valeur 2 le déplacement se fait sur 5 Lignes eu lieu de 2
- Lorsque LignesRoulette est à la valeur 3 le déplacement se fait sur 7 Lignes
- Lorsque LignesRoulette est à la valeur 4 le déplacement se fait sur 9 Lignes

?.........................................

Par avance merci.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 août 2012 à 19:00
Bonjour,
Normal si Objet.TopRow = 2 à ce moment là !
Pourquoi ajoutes-tu donc le toprow déjà présent ? Je n'en vois pas la raison.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
7 août 2012 à 19:12
Bonjour,

Le source indique: Objet.TopRow = Objet.TopRow + LIGNESROULETTE

- Si LIGNESROULETTE 1 et Toprow 1

Cela fait: Objet.Toprow 1 + 1 2
2 étant bien le chifre de Toprow à l'exécution du projet
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 août 2012 à 19:14
Ah ! je vois ! c'est le "pas" d'avancement que tu veux modifier.
Ma remarque précédente n'a donc plus lieu d'être.
Jer ne vois par contre pas ce qui provoquerait ce que tu dis, sauf si l'exécution de la fonction se répétait !
Essaye le pas à pas pour voir si répétition inopinée.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
7 août 2012 à 19:16
J'ai oublié d'indiquer que LIGNESROULETTE et une constante qui n'est jamais modifiée par le
programme mais uniquement (en Option) par l'utilisateur.
0

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

Posez votre question
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
7 août 2012 à 19:40
Je viens de faire un nouvel essai avec un point d'arrêt en fin de boucle.
Avec LIGNESROULETTE = 1 , Toprow est bien incrémenté de un à chaque cycle. (RAS)

Lorsque je retire le point d'arrêt, le défilement se fait avec un pas de 2 ?......

Il doit y avoir un Loup dans la procédure "Hook" ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 août 2012 à 22:07
Je viens de faire un nouvel essai avec un point d'arrêt en fin de boucle.

je ne vois pas de boucle dans le code montré.
Quelle est cette boucle ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
8 août 2012 à 10:52
Je retire le mot boucle pour le remplacer par en fin de procédure


If Objet.TopRow + LIGNESROULETTE < Objet.Rows - 1 Then _
If Objet.TopRow < Objet.Rows - 1 Then Objet.TopRow = Objet.TopRow + LIGNESROULETTE
End If
End If
Feuille.ScaleMode = 1 <------------ ICI

End If
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
8 août 2012 à 11:32
Bonjour,

Pour faciliter la recherche du problème qui est présenté, j'ai téléchargé sur le site
un tout petit projet qui confirme ce qui est dit dans cette discussion.

Alors, si vous avez la solution .....................
Normalement: Un Cran de la Souris = Un déplacement de ligne

http://www.vbfrance.com/codes/UTILISATION-MOLETTE-SOURIS-AVEC-CONTROLE-MSHFLEXGRID_54496.aspx


Merci encore
0
Rejoignez-nous