Mouse Move : difficultés avec l'utilisation des barres de défilement
PhilippeROB
Messages postés5Date d'inscriptionlundi 26 septembre 2005StatutMembreDernière intervention17 octobre 2005
-
17 oct. 2005 à 11:00
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 2011
-
17 oct. 2005 à 15:05
Bonjour le Forum,
J'espère que vous avez passé un agréable we.
J'ai besoin de vos lumières car je suis dans une impasse.
Ce programme utilise l'instruction Mouse_Move qui saisit la position du pointeur de la souris.
Cette instruction fonctionne bien tant qu'on reste dans l'écran.
Dès que j'utilise les barres de défilement horizontale ou verticale, je n'arrive pas à corriger les coordonnées du pointeur.
C'est assez compliqué.
Description :
Il s'agit d'un programme VB6 et non pas d'un programme VBA même si il s'applique sur un classeur EXCEL.
Ce classeur EXCEL comporte plusieurs représentations graphiques, chacune sur une feuille. Ces représentations graphiques sont très semblables : elles ont toutes le même axe des ordonnées [ la profondeur : déplacement Est Ouest (profondeur), déplacement Nord Sud (profondeur), inclinaison(profondeur), Niveau eau(profondeur) etc... etc... ].
Objectif :
J'ai besoin d'écrire des commentaires à certaines ordonnées (c'est-à-dire certaines profondeurs !).
Ces commentaires doivent apparaître sur toutes les feuilles !.
Je veux éviter de faire feuille par feuille car j'ai beaucoup de commentaire à écrire.
Démarche :
- Je sélectionne une feuille en particulier du classeur EXCEL intitulé « sNomFeuille » puis le graphique qui s'y trouve « sObjetGrafSelectionne ».
- Puis je fais apparaître en mode modeless une Form intitulée « F_PosXY » rudimentaire : elle ne contient qu'un TextBox intitulé « TextBoxComment » qui sert à la saisi du commentaire.
- Ensuite, je récupère les coordonnées du pointeur de la souris que je convertis dans l'unité POINTS nécessaire à EXCEL.
- Enfin je colle mon commentaire sur toutes les feuilles.
Qu'est ce qui se passe ?
La copie du commentaire se passe bien tant que je n'utilise pas la barre de défilement horizontale ou verticale.
Je m?explique ! En effet, pour écrire mes commentaires j'ai besoin de voir les détails de la courbe donc j'affiche la feuille à l'échelle 200%.
Par conséquent, si je veux voir l'allure de la courbe en bas, j'utilise la barre de défilement verticale.
Mais quand, je suis en bas (par exemple ), je n'arrive pas à corriger la position du pointeur de la souris : il ne tient pas compte du défilement verticale que j'ai effectué !.
Quelqu'un a t?il/elle rencontré ce problème et a t?il/elle une issue pour me sortir de là.
Je vous remercie.
Philippe
?***********************************************************************
Dans un module de classe intitulé M_PointeurSourisOFFSET:
?***********************************************************************
Public WithEvents PointeurSourisOFFSET As Chart
Private Sub PointeurSourisOFFSET_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim Xcorrige As Single, Ycorrige As Single
Application.Cursor = xlDefault
Xcorrige = PointsPerTwips * x * fctTwipsPerPixel(DIRECTION_HORIZONTAL)
Ycorrige = PointsPerTwips * y * fctTwipsPerPixel(DIRECTION_VERTICAL)
F_PosXY.Hide
Call PlaceCommentairePOINTS("ChartTemp", CStr(F_PosXY.TextBoxComment.Text), Xcorrige, Ycorrige)
Call OFFSET_DesactivePosPointeur
End Sub
?***********************************************************************
Dans un module :
?***********************************************************************
Option Base 1
Option Explicit
'*********************
'Les déclarations suivantes permettent de localiser le pointeur de la souris
Dim mongraphe As New M_PointeurSourisOFFSET 'Nom du module de classe
Public Pointeur As POINTAPI
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Type POINTAPI
x As Long
y As Long
End Type
'*********************
Sub OFFSET_ActivePosPointeur(sNomFeuille As String, sObjetGrafSelectionne As String)
Set mongraphe.PointeurSourisOFFSET = Sheets(sNomFeuille).ChartObjects(sObjetGrafSelectionne).Chart
End Sub
Sub OFFSET_DesactivePosPointeur()
Application.Cursor = xlDefault
Set mongraphe.PointeurSourisOFFSET = Nothing
End Sub
'*********************
Function fctTwipsPerPixel(iDirection As Long) As Long ' Détermine Nb de twips/pixels selon la direction horizontale ou verticale
If iDirection = DIRECTION_HORIZONTAL Then
fctTwipsPerPixel = Screen.TwipsPerPixelX
ElseIf iDirection = DIRECTION_VERTICAL Then
fctTwipsPerPixel = Screen.TwipsPerPixelY
End If
End Function
'*********************
Sub PlaceCommentairePOINTS(NomFeuilGraf As String, sTxtCommentaire As String, _
pointsX As Single, pointsY As Single, Optional pointsL As Single, Optional pointsH As Single)
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 17 oct. 2005 à 15:05
Tu pourrais contourner le problème avec un keypress.
Le keypress te servirai à voir en bas avec la flèche du bas et remonter
avec la flèche du haut, aisin plus besoin d'utiliser ta souris.
(vbKeyDown et vbKeyUp)
Pour te déplacer avec le scroll
ActiveWindow.SmallScroll Down:=-2 'remonte de 2 ligne vers le haut
ActiveWindow.ScrollRow = 17 'reviens à la ligne 17