Page 1 sur 1

[R] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 09:35
par Fish
Bonjours tout le monde, et ave pour les latinistes :P !

Je voulais faire en sorte que la souris, dans un programme, de puisse pas dépasser les bordures de la fenêtre... Mais c'est assez compliqué et je n'y arrive pas...
J'avais pensé à faire avec une fonction style "...Pos" mais je ne trouve pas.

Merci à l'avance pour vos réponses.

Re: [..] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 10:37
par zeshrek
C'est pourtant pas si compliqué !
Il faut juste :
1/ Passer les coordonnées de la souris en mode relatif a la fenetre en cours
2/ vérifier que la fenetre est active
3/ si oui vérifier que la souris ne dépasse pas les bords soit <0 soit >largeur/hauteur de la fenetre
4/ si tel est le cas, la forcer a revenir

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


Dim $MousePos[2]
Opt("MouseCoordMode", 0) ;1/ Passer les coordonnées de la souris en mode relatif a la fenetre en cours
$LargeurForm = 200
$HauteurForm = 200
$NomDuForm = "Formulaire"

$Form1 = GUICreate($NomDuForm, $LargeurForm, $HauteurForm)
$Button1 = GUICtrlCreateButton("Sortir", 67, 87, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            Exit
    EndSwitch
    If WinActive($NomDuForm) Then ; 2/ vérifier que la fenetre est active
        $MousePos = MouseGetPos() ; 3/ si oui vérifier que la souris ne dépasse pas les bords soit <0 soit >largeur/hauteur de la fenetre

        If $MousePos[0] < 0 Then $MousePos[0] = 0
        If $MousePos[0] > $LargeurForm Then $MousePos[0] = $LargeurForm
        If $MousePos[1] < 20 Then $MousePos[1] = 20
        If $MousePos[1] > $HauteurForm + 20 Then $MousePos[1] = $HauteurForm + 20
        MouseMove($MousePos[0], $MousePos[1], 1) ; 4/ si tel est le cas, la forcer a revenir
    EndIf
WEnd

Re: [..] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 10:53
par Iste
Il y a aussi la fonction _MouseTrap() de l'udf Misc.au3

Re: [..] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 11:30
par timmalos
Iste est passé avant moi, n'hesitez pas à utiliser MouseTrap() très utile dans ces cas là.
Mais faites quand meme attention, les utilisateurs n'aiment pas trop être contrariés dans leur mouvement de souris ;)

Re: [..] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 11:54
par zeshrek
Je ne connaissais pas mousetrap(), mais effectivement, c'est parfait... a un détail pres.
Il ne faudrait pas oublier de mettre dans la boucle d'attente des évenements de controler que la fenetre active est bien celle du formulaire concerné parceque avec un simple alt-tab on peut en afficher une autre, et les limitations persistent.
Comme le dit Timmalos, ca peut contrarier les utilisateurs...

en tout cas j'aurai au moins appris une chose aujourd'hui :D

Re: [..] Délimiter la zone de déplacement de la souris

Posté : mar. 21 déc. 2010 14:06
par Fish
:lol: :lol: Moi aussi Zeshrek! J'ai testé sa marche!
Merci de vos réponses et bonne journée!

@Timmalos : Oui, mais je fait un jeu et pour ne pas que l'on triche, j'essaye de garder la fenêtre active et les mouvements de la souris limités :D . Si l'utilisateur veut bouger plus amplement, il faut quitter le programme.