Positionner le Curseur de la souris [Résolu]

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

jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 9 oct. 2008 à 00:18
+3
Utile
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 ...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 8 oct. 2008 à 09:08
0
Utile
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 oct. 2008 à 09:43
0
Utile
Salut,

regarde ce lien peu être sera t il utile.

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 8 oct. 2008 à 10:29
0
Utile
api  clipcursor

Bonjour chez vous !
Commenter la réponse de gillardg
cs_tulesais 177 Messages postés mercredi 2 juin 2004Date d'inscription 11 avril 2013 Dernière intervention - 8 oct. 2008 à 11:28
0
Utile
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 8 oct. 2008 à 21:35
0
Utile
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
cs_tulesais 177 Messages postés mercredi 2 juin 2004Date d'inscription 11 avril 2013 Dernière intervention - 9 oct. 2008 à 08:01
0
Utile
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.