Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Bouton-poussoir à double action Ven 13 Mai 2022 - 1:31 | |
| Bonjour à tous ! Ce bouton-poussoir possède trois "états" : - Repos, correspond à aucun appui ; - Un appui bref qui déclenche une action ; - Un appui prolongé qui déclenche une autre action ; Afin de réaliser un exemple concret du fonctionnement, j’ai créé un code-source très simplifié (et donc un peu austère). Le bouton sera représenté par un simple carré blanc (un PICTURE). Le contrôle du fonctionnement se fera sur un track_bar. Le bouton permettra soit de mémoriser la position du track_bar, soit de rappeler cette position mémorisée. Le fonctionnement : - Placer le curseur du track_bar dans une position quelconque. - Sur le carré blanc, cliquez et maintenez appuyé le bouton gauche de la souris jusqu’à ce que le bouton émette un flash rouge. A ce moment la position du track_bar est mémorisée. Vous pouvez changer la position du curseur, un simple clic gauche bref sur le carré blanc remettra le curseur sur la position qui a été mémorisée précédemment. Le bouton émettra un flash vert. - Code:
-
' Bouton-poussoir 3 états ' Marc - Mai 2022 ' Ecrit en langage Panoramic
dim memoire% label actionbouton
' creerBouton(numéro d'objet, coordonnée en x, coordonnée en y) creerBouton(10,50,50)
' créer un track_bar pour vérifier le bon fonctionnement du programme ' creerTrackBar(numéro d'objet, coordonnée en x, coordonnée en y) creerTrackBar(2,100,50)
end
sub creerBouton(n%,x%,y%) picture 1 width 1,25 height 1,25 top 1,y% left 1,x% color 1,255,255,255 on_mouse_down 1,actionBouton end_sub
actionBouton: off_mouse_down 1 appuiBouton() on_mouse_down 1,actionBouton return
sub appuiBouton() dim_local null%, temps%, mr% ' inhiber bouton droit souris if mouse_right_down(1) = 1 exit_sub end_if ' raffraichir de l'état des boutons de la souris null% = mouse_left_up(1) null% = mouse_left_down(1)
temps% = number_ticks while mouse_left_up(1) = 0 :' Tant que le bouton gauche souris est appuyé if temps% + 2000 < number_ticks memoire% = position(2) color 1,255,0,0 pause 250 color 1,255,255,255 mr% = 1 exit_while end_if end_while if mr% = 0 position 2,memoire% color 1,0,255,0 pause 250 color 1,255,255,255 end_if end_sub
sub creerTrackBar(n%,x%,y%) track_bar n% left n%,x% top n%,y% min n%,0 max n%,100 end_sub
On rencontre ce principe de fonctionnement sur des anciens autoradios avec des touches de présélection des stations. EDIT du 13/05/2022Voici une nouvelle démonstration (un peu plus présentable) du bouton à double action : Le bouton n'est plus un PICTURE mais un BUTTON_PICTURE. La mise en mémoire est visualisée par 2 flashs rouges successifs. J'ai ajouté quelques commentaires dans le code-source. - Code:
-
' Bouton-poussoir double action ' Démonstration ' Marc - Mai 2022 ' Ecrit en langage Panoramic
dim memoire% label actionbouton
interfaceUtilisateur()
end
sub interfaceUtilisateur() height 0,230 width 0,400 left 0,(screen_x - width(0))/2 top 0,(screen_y - height(0))/2 color 0,80,80,80
' Titre et commentaires creerTitre()
' Creer un bouton creerBouton()
' créer un track_bar témoin pour tester le fonctionnement du programme creerTrackBar() end_sub
sub creerTitre() alpha 1 top 1,15 left 1,20 font_size 1,14 font_color 1,255,255,255 caption 1,"Démonstration : Bouton à double action." alpha 2 top 2,45 left 2,30 font_size 2,10 font_color 2,255,255,255 caption 2,"- Appui long : mémorisation de la position du track_bar" alpha 3 top 3,65 left 3,30 font_size 3,10 font_color 3,255,255,255 caption 3,"- Appui court : rappel de la position mise en mémoire" end_sub
sub creerBouton() button_picture 4 width 4,30 height 4,30 top 4,120 left 4,90 button_picture_target_is_picture width 4,30 height 4,30 color 4,240,240,240 on_mouse_down 4,actionBouton end_sub
sub creerTrackBar() track_bar 5 left 5,150 top 5,125 min 5,0 max 5,100 end_sub
actionBouton: off_mouse_down 4 appuiBouton() on_mouse_down 4,actionBouton return
sub appuiBouton() dim_local null%, temps%, mr%
' inhiber l'action du bouton droit souris if mouse_right_down(4) = 1 exit_sub end_if
' raffraichir l'état des boutons de la souris null% = mouse_left_up(4) null% = mouse_left_down(4)
temps% = number_ticks while mouse_left_up(4) = 0 :' Tant que le bouton gauche souris n'est pas laché if temps% + 1500 < number_ticks :' temps d'attente en ms pour valider l'appui long mr% = 1 memoire% = position(5) color 4,255,0,0 pause 100 :' délai du premier flash rouge color 4,240,240,240 pause 100 :' delai entre les deux flashs color 4,255,0,0 pause 100 :' délai du 2ème flash rouge color 4,240,240,240 exit_while end_if end_while if mr% = 0 position 5,memoire% color 4,0,255,0 pause 250 :' délai du flash vert color 4,255,255,255 end_if end_sub
Bonne programmation à tous !
Dernière édition par Marc le Ven 13 Mai 2022 - 14:36, édité 2 fois | |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Bouton-poussoir à double action Ven 13 Mai 2022 - 8:00 | |
| Bonjour Marc et bonjour à tous, Un petit code sans prétention certes... Mais qui montre comment utiliser des clics dans des espaces temps sans TIMER ! Merci pour ce partage. | |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Bouton-poussoir à double action Ven 13 Mai 2022 - 14:33 | |
| Bonjour Minibug et bonjour à tous !
Merci Minibug pour ton commentaire.
Dans le premier post, j'ai ajouté une nouvelle démonstration.
Le PICTURE servant de bouton est remplacé par un BUTTON_PICTURE.
La mémorisation est visualisée par un double flash rouge.
J'ai ajouté quelques commentaires dans le code-source.
Bonne journée à tous ! | |
|