Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 octobre 2017
-
7 août 2012 à 17:20
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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
'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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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" ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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
Cjvg
Messages postés330Date d'inscriptionmercredi 6 décembre 2000StatutMembreDernière intervention26 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