Positionner le Curseur de la souris

Résolu
Signaler
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
-
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
-
Bonjour tout le monde !!!

après plusieurs heures de recherches, je viens vous soumettre mon problème qui ne semble pas, sauf erreur de ma part,
avoir déjà été évoqué.

Suite à un click sur un bouton, je souhaiterais positionner le curseur de la souris sur un objet (image) de mon formulaire.
j'ai essayé d'utiliser 'SetCursorPos' mais cette fonction prend en compte l'écran et non le formulaire !
Et donc, en changeant de résolution d'écran, la position du curseur évolue.

Ma question est donc toute simple, comment récupérer la position de l'objet (image) à partir de l'écran et non du formulaire ???

Merci d'avance pour vos réponses,

7 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Re...
Alors tulesais ?
Et si tu allais faire un tour dans ton aide en ligne pour voir à quoi servent Scalex et scaley et comment on s'en sert ?
(je t'ai laissé le temps de fouiller toi-même un peu...)

Alors :
1) SetCursorPos travaille en pixels
2) le left et le top de ta Form sont indépendants de son scalemode et sont toujours exprimés en twips, à convertir donc en pixels.
3) La position de ton image suit l'échelle (scalemode) choisie pour ta form et il va falloir transposer du scalemode de ta Form en échelle de pixels

donc : (un contrôle image nommé Image1 et un bouton command1 pour lancer le positionnement)

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long



Private Sub Command1_Click()
  Dim posx As Long, posy As Long
  posx = Me.Left / Screen.TwipsPerPixelX + Me.ScaleX(Image1.Left + Image1.Width / 2, Me.ScaleMode, vbPixels)
  posy = Me.Top / Screen.TwipsPerPixelX + Me.ScaleY(Image1.Top + Image1.Height / 2, Me.ScaleMode, vbPixels)
  SetCursorPos posx, posy
End Sub

Ce n'est tout de même pas bien sorcier !
Il suffit dans plus de 90% des cas de lire attentivement ton aide en ligne ...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,
Pour le left, par exemple ;
le left de ta Form  + le Left de ton objet (en prenant bien évodemment en compte, car important, l'échelle (scalemode) choisie pour ta Form)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,

regarde ce lien peu être sera t il utile.

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
api  clipcursor

Bonjour chez vous !
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
je suis perdu !!!

jmfmarques :

A priori ta solution semble royale (merci beaucoup) sauf que je n'arrive pas à la mettre en place à cause du scale (je ne sais pas m'en servir) ! La commande ci-dessous ne se positionne pas la où il faut ! Pour info mon scalemode = 3 (pixel)
SetCursorPos Me.Left + Img.Left, Me.Top + Img.Top

gillardg :

super ton api !!! très facile à mettre en place pour le formulaire mais pour un objet du formulaire ... je n'y suis pas arrivé :-(
   tmpR.Top = Me.Top / Screen.TwipsPerPixelY 
   tmpR.Left = Me.Left / Screen.TwipsPerPixelX 
   tmpR.Right = (Me.Left + Me.Width) / Screen.TwipsPerPixelX 
   tmpR.Bottom = (Me.Top + Me.Height) / Screen.TwipsPerPixelY

Pourriez vous m'en dire un peu plus .. s'il vous plait ???

MERCIIIIIIII d'avance !!!!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,

avec une picturebox (au lieu d'une image), tu peux utiliser l'API ClientToScreen
à voir....
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
WOUAHHH !!!

merci beaucoup jmfmarques !!!

ok ok ... la prochaine fois je me pencherai un peu plus sur l'aide en ligne ... promis !!!

En tout cas, un gros à tout le monde et un énorme à toi !!!

TuLeSais