Positionner le Curseur de la souris [Résolu]

Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
11 avril 2013
- - Dernière réponse : cs_tulesais
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
11 avril 2013
- 9 oct. 2008 à 08:01
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,
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
21
3
Merci
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 ...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
21
0
Merci
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)
Commenter la réponse de jmfmarques
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Salut,

regarde ce lien peu être sera t il utile.

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
17
0
Merci
api  clipcursor

Bonjour chez vous !
Commenter la réponse de gillardg
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
11 avril 2013
1
0
Merci
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 !!!!
Commenter la réponse de cs_tulesais
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
29
0
Merci
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
Commenter la réponse de PCPT
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
11 avril 2013
1
0
Merci
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
Commenter la réponse de cs_tulesais

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.