Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/06/2011, 15h35   #1
Invité de passage
 
Homme
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
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 :
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
nicolas_8104 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 16h28   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 08h04   #3
Invité de passage
 
Homme
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
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.
nicolas_8104 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 07h14   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 616
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 616
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

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

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 09h38   #5
Invité de passage
 
Homme
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Salut,

Citation:
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
nicolas_8104 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h47.


 
 
 
 
Partenaires

Hébergement Web