IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Lire les coordonnées du pointeur souris sur la page


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut Lire les coordonnées du pointeur souris sur la page
    Bonjour à toutes et à tous
    C'est mon premier message sur ce forum.
    Cela fait plusieurs jours que je cherche la solution à mon problème en vain, donc j'ai décidé de m'inscrire ici.
    Sur une page de document Word, je cherche à obtenir les coordonnées du pointeur de la souris relativement à la page du document (c'est à dire que le zéro du repère doit être dans le coin en haut à gauche de la page).
    Pour cela, j'utilise la fonction GetCursorPos qui me donne les coordonnées relativement à l'écran du PC.
    Ensuite j'utilise la fonction ScreenToClient pour convertir les coordonnées du pointeur relativement à la page du document ; du moins je le pensais car cela ne fonctionne pas comme je le voudrais.
    En effet lorsque le pointeur est positionné dans le coin en haut à gauche de la page, ses coordonnées ne sont pas x=0 ni y=0.

    Voici le code source :

    Est-ce que vous voyez d'où vient le problème ?
    Ou bien est-ce moi qui ne comprend pas la fonction de conversion ?
    Merci d'avance.
    Nicolas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    'déclarations
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Public Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
     
    Public Type POINTAPI
      X As Long
      Y As Long
    End Type
     
    Public Retour As Long           'retour de la fonction GetCursorPos
    Public Retour_conversion As Long 'retour de la fonction ScreenToClient
    Public Pos_pointeur As POINTAPI 'Position du pointeur sur l'écran
    Public Handle As Long           'handle de la fenêtre MS Word
     
    ' calcul coordonnée X du pointeur de souris
    Function Coord_x() As Long
     
        Retour = GetCursorPos(Pos_pointeur)                 'mémorisation coordonnées X/Y du pointeur
     
        Handle = FindWindow("OpusApp", Application.ActiveWindow.Caption & " - " & ActiveDocument.Name) 'recherche du Handle de la fenêtre Windows :
                                                            '"OpusApp" : nom de classe d'une application Word
                                                            'Application.Caption : titre de la fenêtre Windows
     
        Retour_conversion = ScreenToClient(Handle, Pos_pointeur)    'conversion coordonnées de l'écran
                                                                    'en coordonnées de l'application
     
        Coord_x = Pos_pointeur.X 'lecture coordonnée x du pointeur
     
    End Function
     
     
    ' calcul coordonnée Y du pointeur de souris
    Function Coord_y() As Long
     
        Retour = GetCursorPos(Pos_pointeur)                 'mémorisation coordonnées X/Y du pointeur
     
        Handle = FindWindow("OpusApp", Application.ActiveWindow.Caption & " - " & ActiveDocument.Name) 'recherche du Handle de la fenêtre Windows :
                                                            '"OpusApp" : nom de classe d'une application Word
                                                            'Application.Caption : titre de la fenêtre Windows
     
        Retour_conversion = ScreenToClient(Handle, Pos_pointeur)    'conversion coordonnées de l'écran
                                                                    'en coordonnées de l'application
     
        Coord_y = Pos_pointeur.Y 'lecture coordonnée y du pointeur
     
    End Function
     
    Public Sub coordonnees()
     
        'laisse le temps de bouger le pointeur de souris à l'emplacement voulu
        MsgBox ("Positionner le curseur puis appuyer sur `entrée`")
     
        'affiche les coordonnées x et y calculées plus haut
        MsgBox ("x : " & Coord_x & " ; Y : " & Coord_y)
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Ce que tu obtiens est la position du curseur dans la fenêtre Windows.
    Pour le document, je n'ai aucune idée.

    Beaucoup de paramètres sont à prendre en compte, l'état de la fenêtre Word, la position des scroll bars, le mode d'affichage, le niveau de zoom.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    Salut,
    Merci de te pencher sur la question.
    Ce que je cherche à faire in fine est reproduire la fonction de dessin de forme automatique sous Word ("simplement" la forme rectangle).

    Le but est de créer un style de trait spécial composé :
    - d'un trait épais de couleur rouge
    - d'un trait noir plus fin "au dessus" du trait rouge

    Le tout traçable à la souris simplement en cliquant comme pour un dessiner rectangle normal.

    Je sais que Word n'est pas un logiciel pour faire du dessin, mais ça me semble faisable quand même...

    Je continue de chercher.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce ne serait pas plus simple de sélectionner la forme et de lancer une macro qui modifie celle-ci ?

    Philippe

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    Salut,

    Bonjour

    Ce ne serait pas plus simple de sélectionner la forme et de lancer une macro qui modifie celle-ci ?

    Philippe
    Effectivement, j'ai pensé à ce compromis.
    Je vais utiliser cette méthode en attendant

    Merci.
    Nicolas

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2014, 12h19
  2. Réponses: 5
    Dernier message: 21/07/2014, 01h15
  3. recuperer les coordonnées de la souris lors d'un appui sur une touche
    Par haraelendil dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 22/11/2007, 14h23
  4. bouger une div selon les coordonnées de la souris
    Par 10-nice dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 21/09/2005, 16h31
  5. Réponses: 2
    Dernier message: 14/09/2005, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo