OVH Cloud OVH Cloud

Afficher une form sur le pointeur de la souris

8 réponses
Avatar
scraper
bonjour à tous !

petit souci :
je récupère les coordonnées du pointeur de la souris à l'écran, et je veux
que, au délcenchement d'un évènement, une form soit affichée à l'emplacement
de ce pointeur ...
or, ça ne fonctionne pas ??


voila ce que j'ai essayé :

'------
Option Explicit

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long,
lpPoint As POINTAPI) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Sub Form_Load()

Dim Point As POINTAPI
Dim RC As Long

Me.ScaleMode = vbPixels
GetCursorPos Point

RC = ClientToScreen(Me.hwnd, Point)
frmDialog.Move Point.X , Point.Y

End Sub
'----

je précise que la form (frmDialog) est affichée lors du déclenchement de
l'évnèvement en question (un clic sur un commandbutton, depuis une autre
form)

actuellement, elle s'affiche, mais aléatoirement, comme si je lui passais
pas les coordonnées du pointeur ?

je précise que si j'essaie de tester un déplacement du pointeur, pour
vérifier, par exemple avec : SetCursorPos Point.X + 50, Point.Y + 50, ça
fonctionne !

y'a un bug, mais où ??

merci de votre aide




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

8 réponses

Avatar
LE TROLL
Salut, heu, par hasard:

'form1
public haut
public gauche
sub evènement_souris_position
if curseur = bonne position then
haut=?
gauche=?
load form2
form2.show
endif
'
sub load_form2 ' ou activate
form2.top = form1.haut
form2.left = form1.gauche

Et ça, est-ce que ça marche ???
----------

"scraper" a écrit dans le message de news:
%23mOwzvj%
bonjour à tous !

petit souci :
je récupère les coordonnées du pointeur de la souris à l'écran, et je veux
que, au délcenchement d'un évènement, une form soit affichée à
l'emplacement
de ce pointeur ...
or, ça ne fonctionne pas ??


voila ce que j'ai essayé :

'------
Option Explicit

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI)
As
Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long,
lpPoint As POINTAPI) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Sub Form_Load()

Dim Point As POINTAPI
Dim RC As Long

Me.ScaleMode = vbPixels
GetCursorPos Point

RC = ClientToScreen(Me.hwnd, Point)
frmDialog.Move Point.X , Point.Y

End Sub
'----

je précise que la form (frmDialog) est affichée lors du déclenchement de
l'évnèvement en question (un clic sur un commandbutton, depuis une autre
form)

actuellement, elle s'affiche, mais aléatoirement, comme si je lui passais
pas les coordonnées du pointeur ?

je précise que si j'essaie de tester un déplacement du pointeur, pour
vérifier, par exemple avec : SetCursorPos Point.X + 50, Point.Y + 50, ça
fonctionne !

y'a un bug, mais où ??

merci de votre aide




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
scraper
ooops !

complément :

la form bouge, mais j'ai des problèmes de mesures !

il semble que le déplacement soit mesuré en twip, et pas en pixels ??

j'ai essayé de bidouiller pour forcer la mesure en pixels, mais apparemment
je dois pas faire ce qu'il faut ...

un peu d'aide serait bienvenue :-)

merci d'avance



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
ng
Salut,

Pour la conversion regarde du coté de ScaleX() et ScaleY().

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

scraper wrote:
ooops !

complément :

la form bouge, mais j'ai des problèmes de mesures !

il semble que le déplacement soit mesuré en twip, et pas en pixels ??

j'ai essayé de bidouiller pour forcer la mesure en pixels, mais
apparemment je dois pas faire ce qu'il faut ...

un peu d'aide serait bienvenue :-)

merci d'avance


Avatar
scraper
Bonjour ng
(dans news:eCJVvBl%)
tu nous disais :

Salut,

Pour la conversion regarde du coté de ScaleX() et ScaleY()



merci de ta réponse ....

entretemps, j'ai trouvé :-)

(quand on commence à voir le problème, on a plus de chances de trouver ...

'----
Option Explicit

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long

Private Type POINTAPI
X As Long
Y As Long
End Type


Private Sub Form_Load()

Dim Point As POINTAPI
Dim RC As Long

GetCursorPos Point
frmDialog.Move (Point.X * Screen.TwipsPerPixelX)+ 100, (Point.Y *
Screen.TwipsPerPixelY) + 100

End Sub
'---

en fait, en convertissant les coordonnées du pointeur en twips, ça le fait
;-)

sans avoir vraiment approfondi la voie que tu me suggérais, je suppose que
le résultat serait similaire ?

merci en tout cas



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
LE TROLL
Salut, moi je laisse en twips, car certains objets ne reconnaissent
que ça, si je me souviens bien...
----------

"scraper" a écrit dans le message de news:
uPxOJ%23k%
ooops !

complément :

la form bouge, mais j'ai des problèmes de mesures !

il semble que le déplacement soit mesuré en twip, et pas en pixels ??

j'ai essayé de bidouiller pour forcer la mesure en pixels, mais
apparemment
je dois pas faire ce qu'il faut ...

un peu d'aide serait bienvenue :-)

merci d'avance



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
Patrice Henrio
Voic ce que je fais avec un frame, est-ce que ça peut s'adapter à une forme
?

Private Sub FrameMenu_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim Top As Single, Left As Single
If Button = 1 Then
With FrameMenu
.Top = Me.ScaleHeight - .Height,.Top + ScaleY(Y, vbTwips, vbPixels)
.Left = .Left + ScaleX(X, vbTwips, vbPixels), Largeur
End With
End If
End Sub


"LE TROLL" <le a écrit dans le message de news:
Of$0nLl%
Salut, moi je laisse en twips, car certains objets ne reconnaissent
que ça, si je me souviens bien...
----------

"scraper" a écrit dans le message de news:
uPxOJ%23k%
ooops !

complément :

la form bouge, mais j'ai des problèmes de mesures !

il semble que le déplacement soit mesuré en twip, et pas en pixels ??

j'ai essayé de bidouiller pour forcer la mesure en pixels, mais
apparemment
je dois pas faire ce qu'il faut ...

un peu d'aide serait bienvenue :-)

merci d'avance



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper








Avatar
Zoury
tu affectes des propriétés existantes sur les 2 deux types non ? :O)
je n'ai pas testé mais je suis sûr que oui

toutefois je te conseilles .Move() au lieu de .Top et .Left successivement.
Ça évite/réduit le "flickering" lors du redessinage du contrôle.


et aussi :
If Button = 1 Then


--> If Button = vbLeftButton Then ;O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Patrice Henrio" a écrit dans le message de
news:ucBYCyl%
Voic ce que je fais avec un frame, est-ce que ça peut s'adapter à une


forme
?

Private Sub FrameMenu_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim Top As Single, Left As Single
If Button = 1 Then
With FrameMenu
.Top = Me.ScaleHeight - .Height,.Top + ScaleY(Y, vbTwips, vbPixels)
.Left = .Left + ScaleX(X, vbTwips, vbPixels), Largeur
End With
End If
End Sub


"LE TROLL" <le a écrit dans le message de news:
Of$0nLl%
> Salut, moi je laisse en twips, car certains objets ne


reconnaissent
> que ça, si je me souviens bien...
> ----------
>
> "scraper" a écrit dans le message de news:
> uPxOJ%23k%
>> ooops !
>>
>> complément :
>>
>> la form bouge, mais j'ai des problèmes de mesures !
>>
>> il semble que le déplacement soit mesuré en twip, et pas en pixels ??
>>
>> j'ai essayé de bidouiller pour forcer la mesure en pixels, mais
>> apparemment
>> je dois pas faire ce qu'il faut ...
>>
>> un peu d'aide serait bienvenue :-)
>>
>> merci d'avance
>>
>>
>>
>> --
>>
>> Attention ! Adresse mail invalide ...
>> Pour me contacter, cliquez sur le lien ci-dessous:
>> http://scraper.chez.tiscali.fr/contact.htm
>>
>> scraper
>>
>>
>
>




Avatar
Patrice Henrio
Oui tout à fait.
C'est pour un programme que j'ai réalisé mais qui doit pouvoir s'adapter au
cas posé.
Le but était de déplacer uen frame avec la souris,
pour le faire apparaitre il suffit de placer .visible à true.
Ne pas oublier de mettre .visible à false dés qu'il perd le focus.


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: uzr8ROm%
tu affectes des propriétés existantes sur les 2 deux types non ? :O)
je n'ai pas testé mais je suis sûr que oui

toutefois je te conseilles .Move() au lieu de .Top et .Left
successivement.
Ça évite/réduit le "flickering" lors du redessinage du contrôle.


et aussi :
If Button = 1 Then


--> If Button = vbLeftButton Then ;O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Patrice Henrio" a écrit dans le message de
news:ucBYCyl%
Voic ce que je fais avec un frame, est-ce que ça peut s'adapter à une


forme
?

Private Sub FrameMenu_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim Top As Single, Left As Single
If Button = 1 Then
With FrameMenu
.Top = Me.ScaleHeight - .Height,.Top + ScaleY(Y, vbTwips,
vbPixels)
.Left = .Left + ScaleX(X, vbTwips, vbPixels), Largeur
End With
End If
End Sub


"LE TROLL" <le a écrit dans le message de news:
Of$0nLl%
> Salut, moi je laisse en twips, car certains objets ne


reconnaissent
> que ça, si je me souviens bien...
> ----------
>
> "scraper" a écrit dans le message de news:
> uPxOJ%23k%
>> ooops !
>>
>> complément :
>>
>> la form bouge, mais j'ai des problèmes de mesures !
>>
>> il semble que le déplacement soit mesuré en twip, et pas en pixels ??
>>
>> j'ai essayé de bidouiller pour forcer la mesure en pixels, mais
>> apparemment
>> je dois pas faire ce qu'il faut ...
>>
>> un peu d'aide serait bienvenue :-)
>>
>> merci d'avance
>>
>>
>>
>> --
>>
>> Attention ! Adresse mail invalide ...
>> Pour me contacter, cliquez sur le lien ci-dessous:
>> http://scraper.chez.tiscali.fr/contact.htm
>>
>> scraper
>>
>>
>
>