AutoIt Français

Nouveau forum : http://www.autoitscript.fr/
 
AccueilFAQRechercherS'enregistrerMembresGroupesConnexionhttp://www.autoitscript.fr

Partagez | 
 

 Detecter le survol de la souris [Resolu]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Detecter le survol de la souris [Resolu]   2007-07-07, 23:55

Salut a tous
Voila je voudrais savoir s'il est possible de detecter le survol (et pas le clic !) de la souris sur un bouton ?


Dernière édition par le 2007-07-19, 13:13, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 00:00

Comme ça, je vois pas vraiment ...
Peut être un bricolage avec mousegetpos vis à vis des coordonnés du bouton, en faisant éxécuter le test de position toutes les 250 ms avec adlibenable ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 00:09

Par exemple :
j'ai une gui avec un boutton ensuite
des que la souris survol ce boutton celui disparaisse ou change de position
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 15:32

voici un exple avec les fonctions precedement citées, mais il y a sûrment mieux ...
[code]
#region --- GuiBuilder code Start ---
; Script generated by AutoBuilder 0.6 Prototype

#include <GuiConstants.au3>

GuiCreate("MyGUI", 392, 323,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

$Button_1 = GuiCtrlCreateButton("Button1", 130, 130, 130, 50)

GuiSetState()



$is_visible=1
AdlibEnable("Check_mouse",250)
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;
EndSelect
WEnd
Exit
#endregion --- GuiBuilder generated code End ---

Func Check_mouse()
Local $local_pos=MouseGetPos()

$tab_pos=ControlGetPos ( "MyGUI", "", $Button_1 ) ; position du bouton
$pos_gui=WinGetPos("MyGUI", "") ; position de la gui

; coordonnées aux extrémités du bouton
$xleft=$tab_pos[0]+$pos_gui[0]
$yup=$tab_pos[1]+$pos_gui[1]+20 ; 20 à cause de la bordure du haut de fenêtre, il y a sûrment mieux à faire ...
$xright=$xleft+$tab_pos[2]
$ydonwn=$yup+$tab_pos[3]


If ($local_pos[0]>=$xleft) And ($local_pos[0]<=$xright) And ($local_pos[1]>=$yup) And ($local_pos[1]<=$ydonwn) Then
; on est dans la zone du bouton, maintenant reste à voire si il est déjà visible ou non
If $is_visible=1 Then
$is_visible=0
GUICtrlSetState($Button_1,$GUI_HIDE)
EndIf
Else
; contraposée
If $is_visible=0 Then
$is_visible=1
GUICtrlSetState($Button_1,$GUI_SHOW)
EndIf
EndIf

EndFunc
[/code]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 19:32

ok sylvanie mais y aurait-il pas plus simple ?
===> ce script est assez lourd quand il est executer (trop de condition "if")
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Max485
Membre avancé


Nombre de messages : 53
Date d'inscription : 06/07/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 19:43

Si ce truc est exectuer que sur ton ordi alors tu peut essayer:
MouseMove (pt1, pt2)

un truc comme ca, ici il explique un peu: http://www.autoitscript.com/autoit3/docs/functions/MouseMove.htm


mais je sais pas si ca marche par raport a ce que tu veus faire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 20:00

"Mousemove" à pour seul but de deplacer la souris
merci quand même
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Max485
Membre avancé


Nombre de messages : 53
Date d'inscription : 06/07/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 20:12

Ah oui comme tu ma dit ca, je vien de regarder ce que tu voulais, et je m'apercois que tu voulais pas juste deplacer la souris mais faire en sorte qu'un bouton la detecte, alors exuse moi d'avoir mal lu ^^ !!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
ani
Modérateur
Modérateur


Nombre de messages : 563
Date d'inscription : 23/01/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-08, 23:50

[url=http://www.autoitscript.com/forum/index.php?showtopic=28714]mousehover[/url] < y a ceux-ci


dans la documentation y a ceux-ci aussi GUIGetCursorInfo ( [winhandle] ), qui renvoie les information du curseur et dans l'element 4 on a l'iD et Le hover over ($array[4] = ID of the control that the mouse cursor is hovering over (or 0 if none))
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-09, 00:14

bien vu pour l'udf ^^

pour la version GUIGetCursorInfo faudra passer aussi par un adlibenable, mais se sera plus léger que ce que j'ai fait.

bien joué
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
ani
Modérateur
Modérateur


Nombre de messages : 563
Date d'inscription : 23/01/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-09, 00:21

oui dans ce genre là (navré c'est pas de moi pas eu le temp de concevoir un exemple :p )
Cette demo montre comment modifier une couleur lors du passage de la souris sur le label .

[i][color=#f000ff]#include[/color][/i] [b][color=#9999cc]<guiconstants.au3>
[/color][i][color=#000090]Opt[/color][/i][color=#ff0000]([/color][color=#9999cc]'GUIOnEventMode'[/color][color=#ff0000],[/color][/b] [i][color=#ac00a9][b]1[/b][/color][/i][b][color=#ff0000])
[/color][color=#0000ff]Global[/color][/b] [b][color=#aa0000]$MainLabelColour[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#ac00a9]0xECE9D8[/color][/i][color=#ff0000],[/color][/b] [b][color=#aa0000]$OverLabelColour[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#ac00a9]0xFFFFCC[/color][/i][color=#ff0000],[/color][/b] [b][color=#aa0000]$MouseOver[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#ac00a9]1
[/color][/i][color=#aa0000]$MainGUI[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#000090]GUICreate[/color][/i][color=#ff0000]([/color][color=#9999cc]'Test'[/color][color=#ff0000],[/color][/b] [b][i][color=#ac00a9]440[/color][/i][color=#ff0000],[/color][/b] [i][color=#ac00a9][b]120[/b][/color][/i][b][color=#ff0000])
[/color][color=#aa0000]$label1[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#000090]GUICtrlCreateLabel[/color][/i][color=#ff0000]([/color][color=#ff33ff]@CRLF[/color][/b] [b][color=#ff0000]&[/color][/b] [b][color=#9999cc]"Open File"[/color][color=#ff0000],[/color][/b] [b][i][color=#ac00a9]40[/color][/i][color=#ff0000],[/color][/b] [b][i][color=#ac00a9]40[/color][/i][color=#ff0000],[/color][/b] [b][i][color=#ac00a9]360[/color][/i][color=#ff0000],[/color][/b] [b][i][color=#ac00a9]40[/color][/i][color=#ff0000],[/color][/b] [b][color=#aa0000]$SS_SUNKEN[/color][/b] [b][color=#ff0000])
[/color][i][color=#000090]GUICtrlSetBkColor[/color][/i][color=#ff0000](-[/color][i][color=#ac00a9]1[/color][/i][color=#ff0000],[/color][/b] [color=#aa0000][b]$MainLabelColour[/b][/color][b][color=#ff0000])
[/color][i][color=#000090]GUISetOnEvent[/color][/i][color=#ff0000]([/color][color=#aa0000]$GUI_EVENT_CLOSE[/color][color=#ff0000],[/color][/b] [b][color=#9999cc]'_Exit'[/color][color=#ff0000],[/color][/b] [color=#aa0000][b]$MainGUI[/b][/color][b][color=#ff0000])
[/color][i][color=#000090]AdlibEnable[/color][/i][color=#ff0000]([/color][color=#9999cc]"_AdlibManager"[/color][color=#ff0000],[/color][/b] [i][color=#ac00a9][b]10[/b][/color][/i][b][color=#ff0000])
[/color][i][color=#000090]GUISetState[/color][/i][/b][b][color=#ff0000]()

[/color][color=#0000ff]While[/color][/b] [b][i][color=#ac00a9]1
[/color][/i][/b] [b][i][color=#000090]Sleep[/color][/i][color=#ff0000]([/color][i][color=#ac00a9]10000[/color][/i][/b][b][color=#ff0000])
[/color][color=#0000ff]WEnd

Func[/color][/b] _AdlibManager[b][color=#ff0000]()
[/color][/b] _LabelOver[b][color=#ff0000]([/color][color=#aa0000]$MainGUI[/color][color=#ff0000],[/color][/b] [color=#aa0000][b]$label1[/b][/color][color=#ff0000][b])
[/b][/color][b][color=#0000ff]EndFunc

Func[/color][/b] _LabelOver[b][color=#ff0000]([/color][color=#aa0000]$hMainWnd[/color][color=#ff0000],[/color][/b] [b][color=#aa0000]$hControl[/color][color=#ff0000])
[/color][/b] [b][color=#0000ff]Local[/color][/b] [b][color=#aa0000]$aGetCursor[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#000090]GUIGetCursorInfo[/color][/i][color=#ff0000]([/color][color=#aa0000]$MainGUI[/color][color=#ff0000])
[/color][/b] [b][color=#0000ff]If[/color][/b] [b][color=#aa0000]$MouseOver[/color][/b] [b][color=#0000ff]and[/color][/b] [b][color=#aa0000]$aGetCursor[/color][color=#ff0000][[/color][i][color=#ac00a9]4[/color][/i][color=#ff0000]][/color][/b] [b][color=#ff0000]=[/color][/b] [b][color=#aa0000]$hControl[/color][/b] [b][color=#0000ff]Then
[/color][/b] [b][i][color=#000090]GUICtrlSetBkColor[/color][/i][color=#ff0000]([/color][color=#aa0000]$hControl[/color][color=#ff0000],[/color][/b] [b][color=#aa0000]$OverLabelColour[/color][color=#ff0000])
[/color][/b] [b][color=#aa0000]$MouseOver[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#ac00a9]0
[/color][/i][/b] [b][color=#0000ff]ElseIf[/color][/b] [b][color=#0000ff]Not[/color][/b] [b][color=#aa0000]$MouseOver[/color][/b] [b][color=#0000ff]And[/color][/b] [b][color=#0000ff]Not[/color][/b] [b][color=#aa0000]$aGetCursor[/color][color=#ff0000][[/color][i][color=#ac00a9]4[/color][/i][color=#ff0000]][/color][/b] [b][color=#ff0000]=[/color][/b] [b][color=#aa0000]$hControl[/color][/b] [b][color=#0000ff]Then
[/color][/b] [b][i][color=#000090]GUICtrlSetBkColor[/color][/i][color=#ff0000]([/color][color=#aa0000]$hControl[/color][color=#ff0000],[/color][/b] [b][color=#aa0000]$MainLabelColour[/color][color=#ff0000])
[/color][/b] [b][color=#aa0000]$MouseOver[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#ac00a9]1
[/color][/i][/b] [b][color=#0000ff]EndIf
EndFunc

Func[/color][/b] _Exit[b][color=#ff0000]()
[/color][/b] [b][color=#0000ff]Exit[/color][/b] [b][i][color=#ac00a9]0
[/color][/i][color=#0000ff]EndFunc[/color][/b]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-09, 23:39

Quelqu'un peut expliquer par un p'tit exemple l'utilisation de "GUIGetCursorInfo" ainsi que le "$array[4]" ?
merci...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
ani
Modérateur
Modérateur


Nombre de messages : 563
Date d'inscription : 23/01/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-10, 15:30

tu ne comprend pas ou auto?

pour le [color=#000090][b][i]GUIGetCursorInfo [/i][/b]y a un exemple dans l'aide[/color]
[color=#000090][/color]
[color=#000090]cette fonction permet de renvoier un tableau avec 5 element[/color]
[color=#000090]1. coordonnée X (horizontal)[/color]
[color=#000090]2. coordonnée Y (vertical)[/color]
[color=#000090]3. Le premier bouton (renvoi 1 si pressé sinon 0)[/color]
[color=#000090]4. le deuxieme bouton (renvoi 1 si pressé sinon 0)[/color]
[color=#000090]5. L'id du contrôle Qui est vu (hover over)[/color]
[color=#000090][/color]
[color=#000090]en anglais c'est çà.[/color]
[color=#000090]
$array[0] = X coord (horizontal)
$array[1] = Y coord (vertical)
$array[2] = Primary down (1 if pressed, 0 if not pressed)
$array[3] = Secondary down (1 if pressed, 0 if not pressed)
$array[4] = ID of the control that the mouse cursor is hovering over (or 0 if none)[/color]

dans l'exemple ci-dessus
on a [color=#0000ff][b]Local[/b][/color] [b][color=#aa0000]$aGetCursor[/color][/b] [b][color=#ff0000]=[/color][/b] [b][i][color=#000090]GUIGetCursorInfo[/color][/i][color=#ff0000]([/color][color=#aa0000]$MainGUI[/color][color=#ff0000])
[/color][/b]
[color=#ff0000][b]$aGetCursor[/b][/color][color=#000000] est le nom donné au tableau qui contiendra les element cité plus haut.[/color]
[color=#000000][/color][color=#ff0000][/color]
[color=#ff0000]si on a agetcursor[0] il renvoie la coordonné X de la souris [/color][color=#ff0000]
si on a agetcursor[1] il renvoie la coordonné Y[/color]
[color=#ff0000]ect[/color]

[color=#ff0000]sinon sylvanie t'a disposé un beau script,, d'accord il est pas evident a comprendre (meme moi j'ai du mal)[/color]
[color=#ff0000][/color]
[color=#ff0000][/color]
[color=#ff0000]Ou bien y a mousehover donnée plus haut, si tu ne comprend pas hésite pas à demander,, bon moi j'ai pas encore eu l'occasion de l'utiliser juste tester le script :o[/color]


Dernière édition par le 2007-07-18, 00:06, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-17, 22:32

peut-on stocker dans une variable ,par exemple tout les nombres compris entre 100 et 200 ?

Genre un truc qui ressemblerai à cela :
$nbs = [100;200]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-17, 22:55

et bien oui avec un tableau
Dim $nbs[101]

for ind=0 to 100
$nbs[$ind]=100+$ind
next
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-17, 23:51

et Comment l'employer ?
j'ai testé ceci:


Dim $nbs[101]

for $ind=0 to 100
$nbs[$ind]=100+$ind
next


While 1
if $nbs = 101 Then
MsgBox(0,"ok","ok")
ExitLoop
Else
MsgBox(0,"non","non")
ExitLoop
EndIf
WEnd


afin de voir si (par exemple 101) fait bien partie de $nbs ,mais cela renvoi toujours à la MsgBox(0,"non","non")
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-18, 00:18

Dim $nbs[101] créée un tableau de 101 composantes.
Après pour y accéder tu doid passer par $nbs[$indice] avec $indice dans [0,100] (un tableau commence tjrs par l'indice 0)

donc si tu veux tester si 104 est dans ton tableau (j'ai changé pour éviter les confusion entre le nbr cherché et la taille max du tableau) , il te faut le parcourir avec une boucle for ou while

version for (à l'arrache modulo des coquille de frappe):
$trouve=0
for $ind=0 to 100
if $nbs[$ind]=104 then
$trouve=1
exitloop ; ça c'est pour arrêter la boucle inutillement puisqu'on a trouvé
endif
next
if $touve=0 Then
msgb0x(0,"ko","pas trouve")
else
msgbox(0,"trouve","...")
endif

version while
$trouve=0
$ind=0
while $ind < 101
if $nbs[$ind]=104 Then
$trouve=1
exitloop
endif
$ind+=1
wend
if $touve=0 Then
msgb0x(0,"ko","pas trouve")
else
msgbox(0,"trouve","...")
endif

version while condencée :

$ind=0
while $ind <101 and $nbs[$ind]<>104
$ind+=1
wend

if $ind=101 Then
msgbox(0,"ko","pas trouvé")
else
msgbox(0","trouve","trouve")
endif
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-19, 00:44

ok mais comment pourrais je faire pour l'appliquer au sujet : Detecter le survol de la souris


En fait en voulant creer une variable qui stocke plusieurs nombres c'est pour la tester (if...) avec la position de la souris.

Par exemple (pour faire simple on neglige les marges)

- une gui position : x=0 et y=0

-un boutton positon : x=100 y=100 taille : 100x100



donc pour toutes positions de la souris dans la partie de l'ecran compris entre 100 et 200 ==> la souris est sur le boutton et donc ainsi avec une
condition (if..) et une boucle, je peux detecter quand la souris survol le boutton.




Y a t-il une solution ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
VooDoo
Modérateur
Modérateur


Nombre de messages : 161
Date d'inscription : 11/12/2006

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-19, 12:37

toujours ^^

[color=Red]#include[/color] <GUIConstants.au3>
[color=MediumBlue]$gui=GUICreate[/color] [b]([/b] "My GUI" [b])[/b]
[color=MediumBlue]$but=GUICtrlCreateButton[/color] [b]([/b] "Button" [color=Green],[/color] [i]50[/i] [color=Green],[/color] [i]50[/i] [color=Green],[/color] [i]50[/i] [color=Green],[/color] [i]50[/i] [b])[/b]
[b]GUISetState[/b] [b]([/b] [b])[/b]
[color=Green]While[/color] [i]1[/i]
[b]sleep[/b] [b]([/b] [i]1[/i] [b])[/b]
[color=MediumBlue]$msg[/color] [color=Green]=[/color] [b]GUIGetMsg[/b] [b]([/b] [b])[/b]
[color=MediumBlue]$pos[/color] [color=Green]=[/color] [b]GUIGetCursorInfo[/b] [b]([/b] [b])[/b]
[color=Green]if[/color] [color=MediumBlue]$pos[4]=$but[/color] [color=Green]then[/color] [b]msgbox[/b] [b]([/b] [i]0[/i] [color=Green],[/color] "msg:" [color=Green],[/color] "Sur le button !" [b])[/b]
[color=Green]If[/color] [color=MediumBlue]$msg[/color] [color=Green]=[/color] [color=MediumBlue]$GUI_EVENT_CLOSE[/color] [color=Green]Then[/color] [b]ExitLoop[/b]
[color=Green]Wend[/color]

_________________
[img]http://img87.imageshack.us/img87/7941/autoit6oy.jpg[/img]
[url=http://autoit-fr.realbb.net/AutoIt-v3-c2/Entraide-f5/Regles-t39.htm][i]Lisez les règles ou soyez maudit ![/i][/url]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
auto
Membre


Nombre de messages : 39
Date d'inscription : 30/04/2007

MessageSujet: Re: Detecter le survol de la souris [Resolu]   2007-07-19, 13:12

ok VooDoo
ani m'avait deja donné un exemple mais maintenant je comprend mieu (vu qu'il y a que l'essentiel et c'est clair)


et moi qui allé m'embarquer dans les variable (merci tout de meme sylvanie pour tes explication)



En fait :
==> $array[4] ici dans l'exemple $pos[4]
$pos doit etre = guigetcursorinfo() et puis on recupere l'id 4

c'est par là qu'il fallait commencer

Merci à tous...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Detecter le survol de la souris [Resolu]   Aujourd'hui à 16:30

Revenir en haut Aller en bas
 
Detecter le survol de la souris [Resolu]
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Cadre message décalé au survol de la souris.
» Modification d'une image au survol de la souris
» Voir la description d'un groupe au survol de la souris.
» Image Reactive au survol de la souris
» Le survol de la souris n'arrête plus le défilement.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
AutoIt Français :: AutoIt v3 :: Entraide-
Sauter vers: