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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Fish
Niveau 5
Niveau 5
Messages : 178
Enregistré le : sam. 23 oct. 2010 19:28
Localisation : Devant mon ordinateur.
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Fish le mar. 21 déc. 2010 14:06, modifié 1 fois.
Cordialement,
Fish-panai.
P.S (Pas Salé): Vive le poisson pané.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

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

#2

Message 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
Si vis pacem para bellum
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#3

Message par Iste »

Il y a aussi la fonction _MouseTrap() de l'udf Misc.au3
Signez ici
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#4

Message 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 ;)
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

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

#5

Message 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
Si vis pacem para bellum
Avatar du membre
Fish
Niveau 5
Niveau 5
Messages : 178
Enregistré le : sam. 23 oct. 2010 19:28
Localisation : Devant mon ordinateur.
Status : Hors ligne

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

#6

Message 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.
Cordialement,
Fish-panai.
P.S (Pas Salé): Vive le poisson pané.
Répondre