cs_tulesais
Messages postés177Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 avril 2013
-
8 oct. 2008 à 08:51
cs_tulesais
Messages postés177Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 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 ???
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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)
cs_tulesais
Messages postés177Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 avril 20132 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 ???