Bonjour à tous !
Loin de moi l’idée de faire mon pédant, je souhaite juste partager quelques astuces sur la gestion des fonctions :
- MOUSE_LEFT_DOWN(N)
- MOUSE_LEFT_UP(N)
- MOUSE_RIGHT_DOWN(N)
- MOUSE_RIGHT_UP(N)«
N » étant le numéro d’objet sur lequel on opère l’action.
Elles ont un fonctionnement particulier qui peut rapidement poser problème dans un code si l'on ne connait pas le comportement interne de ces fonctions.
1) Ces fonctions retournent soit un « 0 » soit un « 1 ».
Elles permettent de savoir si un des deux boutons de la souris a été enfoncé ou relâché.
2)
Ces fonctions sont immédiatement remises à « 0 » après les avoir interrogées, même si l’action sur le bouton perdure.Seule une nouvelle action pourra refaire passer à «
1 » le résultat d’une de ces fonctions. C’est le
changement d’état enfoncé / relâché du bouton qui fait basculer la valeur d’une fonction de «
0 » à «
1 ».
Exemple séquentiel de fonctionnement avec la fonction
MOUSE_LEFT_DOWN(N) :
- Lecture de la valeur de la fonction
MOUSE_LEFT_DOWN(N) =>
0- Enfoncer et maintenir enfoncé la touche gauche de la souris
- Lecture de la valeur de la fonction
MOUSE_LEFT_DOWN(N) =>
1- Nouvelle lecture (la touche est restée enfoncée) de la valeur de
MOUSE_LEFT_DOWN =>
0La valeur restera à «
0 » tant que le bouton de la souris ne sera pas relâché puis ré-enfoncé.
Ce mécanisme est identique pour les 4 fonctions.
Voici une démonstration avec un code à exécuter.
Dans ce code, la fonction utilisée est
MOUSE_LEFT_DOWN(N) ; L’objet
N servant de test est l’objet
BUTTON 1 ; Le résultat s’affiche dans l’
EDIT ; Pour sortir du programme, appuyez sur la touche «
Echap ».
- Code:
-
' Démonstration de la fonction MOUSE_LEFT_DOWN(N)
' Pour le test, N sera le BUTTON 1
' la lecture de la fonction s'affiche dans l'objet EDIT
' ESC pour sortir du programme
' une lecture toutes les 250 ms
caption 0,"Touche ''Echap'' pour sortir du programme !"
button 1 : top 1,90 : left 1,80 : caption 1,"Zone de test"
edit 2 : top 2,30 : left 2,30 : width 2,200
while scancode <> 27
text 2,"MOUSE_LEFT_DOWN(1) => " + str$(MOUSE_LEFT_DOWN(1))
pause 250
end_while
terminate
end
Pour aller plus loin…Dans certains cas, il peut être opportun de réinitialiser ces fonctions avant d’entrer dans une boucle de lecture.
La réinitialisation s’effectue simplement en lisant la valeur des fonctions (Je rappelle qu’elles se remettent à « 0 » dès qu’il y a eu une lecture).
Code d’exemple :
- Code:
-
' déclarer une variable
dim null%
' lecture des 4 fonctions
null% = mouse_left_up(objet%)
null% = mouse_left_down(objet%)
null% = mouse_right_up(objet%)
null% = mouse_right_down(objet%)
' les 4 fonctions sont réinitialisées à "0"
end
Une question :
Mais comment fait-on pour savoir si le bouton gauche de la souris est resté enfoncé ?
Tout simplement en créant une variable qui mémorisera l’état du bouton de la souris.
Pour le bouton gauche de la souris, il faudra utiliser le couple
MOUSE_LEFT_DOWN (N) et
MOUSE_LEFT_UP(N) avec deux conditions IF ....... END_IF.
La première condition va vérifier si le bouton gauche de la souris a été enfoncé.
La deuxième condition va vérifier si le bouton gauche de la souris a été relâché.
Exemple :
- Code:
-
' déclarer une variable
dim boutonGaucheEnfonce%
caption 0,"Touche ''Echap'' pour sortir du programme !"
button 1 : top 1,90 : left 1,80 : caption 1,"Zone de test"
edit 2 : top 2,30 : left 2,30 : width 2,200
while scancode <> 27
if mouse_left_down(1) = 1
boutonGaucheEnfonce% = 1
end_if
if mouse_left_up(1) = 1
boutonGaucheEnfonce% = 0
end_if
text 2,"boutonGaucheEnfonce% => " + str$(boutonGaucheEnfonce%)
' petite pause pourne pas affoler le processeur
pause 20
end_while
terminate
end
Bonne programmation à tous !