silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: on_mouse_move + clic en 1 commande Dim 10 Mai 2020 - 12:19 | |
| Bonjour à tous En utilisant la commande ON_MOUSE_MOVE, je me suis aperçu que celle-ci réagissait au clic gauche de la souris d'une manière particulière. J'ai d'abord pensé à un bug, mais en poussant les tests je me suis rendu compte que c'est tout à fait exploitable. Avec cette caractéristique, on peut par exemple éclairer une icone et la faire réagir au clic avec du son, animer un objet par exemple(déclencher un movie),... très facilement en une commande! Un petit exemple: - Code:
-
' PEI 0.9.29i8
label mm00,mm10,mm11,mm12
dim cur_obj
' caption 0," cliquez n'importe où..." left 0,(screen_x/2)-300 : top 0,(screen_y/2)-200 picture 10 :left 10,37 : top 10,171 picture 11 :left 11,242 : top 11,171 picture 12 :left 12,450 : top 12,171
' HIGHT_LIGHT(0) :' éclaire l'objet 0 par défaut DOWN_LIGHT(10) :' assombri l'objet 10 par défaut DOWN_LIGHT(11) :' assombri l'objet 11 par défaut DOWN_LIGHT(12) :' assombri l'objet 12 par défaut
' active la détection de mouvement + le clic! on_mouse_move 0,mm00 on_mouse_move 10,mm10 on_mouse_move 11,mm11 on_mouse_move 12,mm12
END ' MOUSE_MOVE_CHECK(cur_obj) : surveille 'cur_obj' et initialise les 3 variables ci-dessous ' MOUSE_OVER() : retourne -1 ou le n° de l'objet survolé, puis -1 tant que la souris reste sur cet objet ' LAST_MOUSE_OVER() : retourne -1 ou le n° du DERNIER objet survolé, puis -1 tant que la souris reste sur l'objet NOUVELLEMENT survolé ' MOUSE_MOVE_CLICKED() : retourne 0 ou 1 si clic dans l'objet survolé, puis 0 tant que la souris reste sur cet objet mm00: cur_obj=0 off_mouse_move cur_obj ' MOUSE_MOVE_CHECK(cur_obj) :' surveiller l'objet 0 ' résultat de la surveillance: if MOUSE_OVER()>-1 :' l'objet 0 est survolé ? HIGHT_LIGHT(MOUSE_OVER()) :' oui, change l'aspect(l'éclaire) de l'objet survolé DOWN_LIGHT(LAST_MOUSE_OVER()) :' et l'aspect du dernier objet survolé(l'assombri) end_if if MOUSE_MOVE_CLICKED()=1 :' action si clic dans l'objet 0 print "clic "+str$(cur_obj) :' afficher un texte par exemple ' end_if ' on_mouse_move cur_obj,mm00 return
mm10: cur_obj=10 off_mouse_move cur_obj ' MOUSE_MOVE_CHECK(cur_obj) :' surveiller l'objet 10 ' résultat de la surveillance: if MOUSE_OVER()>-1 :' l'objet 10 est survolé ? HIGHT_LIGHT(MOUSE_OVER()) :' oui, change l'aspect(l'éclaire) de l'objet survolé DOWN_LIGHT(LAST_MOUSE_OVER()) :' et l'aspect du dernier objet survolé(l'assombri) end_if if MOUSE_MOVE_CLICKED()=1 :' action si clic dans l'objet 10 print "clic "+str$(cur_obj) :' afficher un texte par exemple beep :' et un son end_if ' on_mouse_move cur_obj,mm10 return
mm11: cur_obj=11 off_mouse_move cur_obj ' MOUSE_MOVE_CHECK(cur_obj) :' surveiller l'objet 11 ' résultat de la surveillance: if MOUSE_OVER()>-1 :' l'objet 11 est survolé ? HIGHT_LIGHT(MOUSE_OVER()) :' oui, change l'aspect(l'éclaire) de l'objet survolé DOWN_LIGHT(LAST_MOUSE_OVER()) :' et l'aspect du dernier objet survolé(l'assombri) end_if if MOUSE_MOVE_CLICKED()=1 :' action si clic dans l'objet 11 print "clic "+str$(cur_obj) :' afficher un texte par exemple beep_exclamation :' et un son end_if ' on_mouse_move cur_obj,mm11 return
mm12: cur_obj=12 off_mouse_move cur_obj ' MOUSE_MOVE_CHECK(cur_obj) :' surveiller l'objet 12 ' résultat de la surveillance: if MOUSE_OVER()>-1 :' l'objet 12 est survolé ? HIGHT_LIGHT(MOUSE_OVER()) :' oui, change l'aspect(l'éclaire) de l'objet survolé DOWN_LIGHT(LAST_MOUSE_OVER()) :' et l'aspect du dernier objet survolé(l'assombri) end_if if MOUSE_MOVE_CLICKED()=1 :' action si clic dans l'objet 12 print "clic "+str$(cur_obj) :' afficher un texte par exemple beep_information :' et un son end_if ' on_mouse_move cur_obj,mm12 return
' modifier l'aspect(l'éclairage) de l'objet lorsque celui-ci est survolé sub HIGHT_LIGHT(obj) ' if obj=0 then color 0,236,233,216 if obj=10 then color 10,255,255,255 if obj=11 then color 11,255,255,255 if obj=12 then color 12,255,255,255 end_sub
' rétablir l'aspect(l'éclairage) de l'objet lorsque celui-ci n'est plus survolé sub DOWN_LIGHT(obj) ' if obj=0 then color 0,190,186,173 if obj=10 then color 10,204,204,204 if obj=11 then color 11,204,204,204 if obj=12 then color 12,204,204,204 end_sub
' ############################################################################## ' # # ' # PROCEDURES POUR 'ON_MOUSE_MOVE' + CLIC # ' # # ' ############################################################################## ' détecter le clic dans un objet survolé sub MOUSE_MOVE_CHECK(MOUSE_MOVE_CHECK_cur_obj) dim_local MOUSE_MOVE_CHECK_null if variable("MOUSE_MOVE_CHECK_obj_clic")=0 dim MOUSE_MOVE_CHECK_obj_clic,MOUSE_MOVE_CHECK_last_obj,MOUSE_MOVE_CHECK_change,MOUSE_MOVE_CHECK_clic,MOUSE_MOVE_CHECK_last MOUSE_MOVE_CHECK_obj_clic=0 MOUSE_MOVE_CHECK_last_obj=0 end_if MOUSE_MOVE_CHECK_change=-1 :' par défaut MOUSE_MOVE_CHECK_last=-1 :' par défaut MOUSE_MOVE_CHECK_clic=0 :' par défaut ' if mouse_left_down(MOUSE_MOVE_CHECK_cur_obj)=1 then MOUSE_MOVE_CHECK_obj_clic=MOUSE_MOVE_CHECK_cur_obj :' capturer le n° de l'objet survolé ' if MOUSE_MOVE_CHECK_cur_obj<>MOUSE_MOVE_CHECK_obj_clic then MOUSE_MOVE_CHECK_null=mouse_left_up(MOUSE_MOVE_CHECK_obj_clic) :' purger la commande si le n° de l'objet survolé :' est <> du n° de l'objet cliqué ' if mouse_left_up(MOUSE_MOVE_CHECK_cur_obj)=1 then MOUSE_MOVE_CHECK_clic=1 :' remplir la variable MOUSE_MOVE_CLICKED() ' if MOUSE_MOVE_CHECK_cur_obj<>MOUSE_MOVE_CHECK_last_obj :' remplir les variables d'état MOUSE_MOVE_CHECK_change=MOUSE_MOVE_CHECK_cur_obj :' remplir la variable MOUSE_OVER() MOUSE_MOVE_CHECK_last=MOUSE_MOVE_CHECK_last_obj :' remplir la variable LAST_MOUSE_OVER() end_if ' MOUSE_MOVE_CHECK_last_obj=MOUSE_MOVE_CHECK_cur_obj end_sub
' retouner des valeurs fnc MOUSE_OVER() result MOUSE_MOVE_CHECK_change end_fnc
fnc LAST_MOUSE_OVER() result MOUSE_MOVE_CHECK_last end_fnc
fnc MOUSE_MOVE_CLICKED() result MOUSE_MOVE_CHECK_clic end_fnc
| |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: on_mouse_move + clic en 1 commande Dim 10 Mai 2020 - 14:11 | |
| Ah oui, c'est intéressant ! Une astuce à mettre de côté ! | |
|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: on_mouse_move + clic en 1 commande Dim 10 Mai 2020 - 14:42 | |
| Ca hume un nouveau jeu basé dessus ??? Qu'as tu pensé de mon piano à 3 notes ? Les autres sont ici: - Code:
-
dim frequence%,duree%
duree% = 1000 :' en ms for frequence%=0 to 5000 step 1000 :' Hertz caption 0,str$(frequence%) NOTE(frequence%,duree%) next frequence%
terminate
END sub NOTE(frequence%,duree%) dim_local Result% dll_on "kernel32" Result%=dll_call2("Beep",frequence%,duree%) dll_off end_sub | |
|
Contenu sponsorisé
| Sujet: Re: on_mouse_move + clic en 1 commande | |
| |
|