Positionner le Curseur de la souris

Résolu
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 - 8 oct. 2008 à 08:51
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre 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,

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 oct. 2008 à 00:18
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 ...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 oct. 2008 à 09:08
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)
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 oct. 2008 à 09:43
Salut,

regarde ce lien peu être sera t il utile.

@+: Ju£i€n
Pensez: Réponse acceptée
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
8 oct. 2008 à 10:29
api  clipcursor

Bonjour chez vous !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
8 oct. 2008 à 11:28
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 !!!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 oct. 2008 à 21:35
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
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
9 oct. 2008 à 08:01
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
0
Rejoignez-nous