French Evenement prolongé dans le temps

anass114

New Member
Bonjour à tous

je bloque sur mon programme sur quelque chose que j'arrive pas à faire
je voudrais faire
tant qu'on appuie sur ce bouton je fais quelque chose
et je n'arrive pas à le faire , le button_click ne se met en route que lorsqu'on lache le bouton .
 

Informatix

Expert
Licensed User
Longtime User
Bonjour à tous

je bloque sur mon programme sur quelque chose que j'arrive pas à faire
je voudrais faire
tant qu'on appuie sur ce bouton je fais quelque chose
et je n'arrive pas à le faire , le button_click ne se met en route que lorsqu'on lache le bouton .

Un appui sur l'écran génère trois événements (que tu récupères avec Touch):
Action = 0 DOWN (le doigt vient d'appuyer)
Action = 2 MOVE (le doigt vient de se déplacer)
Action = 1 UP (le doigt n'appuie plus sur l'écran)

Donc, dans ton cas, il faut mettre un booléen à vrai quand tu reçois l'événement Down (Action = 0) et à faux quand tu reçois l'événement Up (Action = 1). Ainsi tu peux répéter une opération tant que ton booléen est vrai.
 

jp02

Member
Licensed User
Longtime User
Bonjour,

voici quelques lignes d'un exemple de la doc en préparation en français :
tu définis un bouton : button1 et un label : label1

Sub Button1_Down
label1.Text=("buongiorno")
End Sub

Sub Button1_Up
label1.Text=("¡hola")
End Sub

Sub Button1_Click
label1.Text=("Hello")
End Sub

Sub Button1_LongClick
label1.Text=("guten Tag")
End Sub

c'est un peu "tricky entre LongClick et Button1_Up " mais ça fonctionne.
C'est aussi une utilisation extrême pour expliquer les 4 actions supportées par un bouton.
Bon courage !
JP
 

anass114

New Member
Bonjour,

voici quelques lignes d'un exemple de la doc en préparation en français :
tu définis un bouton : button1 et un label : label1

Sub Button1_Down
label1.Text=("buongiorno")
End Sub

Sub Button1_Up
label1.Text=("¡hola")
End Sub

Sub Button1_Click
label1.Text=("Hello")
End Sub

Sub Button1_LongClick
label1.Text=("guten Tag")
End Sub

c'est un peu "tricky entre LongClick et Button1_Up " mais ça fonctionne.
C'est aussi une utilisation extrême pour expliquer les 4 actions supportées par un bouton.
Bon courage !
JP



ça je l'avais compris :)
ce que je ne sais pas faire c'est comment récuperer la variable action à partir de touch ?

dim test as boolean


sub button_touch ( action as int )

if action = 0 then
test = true

end if
if action = 1 then
test = false
end if


end sub

sub montruc
do while test = true
ma_fonction
loop
end sub

mais c'est inutile si je fais ça et je pense faire une erreur ??
 

jp02

Member
Licensed User
Longtime User
ça je l'avais compris
ce que je ne sais pas faire c'est comment récuperer la variable action à partir de touch ?
Action est du type int :
sub button_touch ( action as int )
tu ne peut avoir un boolean
action sera 1,2,3,4.....
et si action =1 alors ....
 

Informatix

Expert
Licensed User
Longtime User
Les boutons n'ont pas d'événement Touch. Il faut soit utiliser un Panel à la place, soit utiliser une bibliothèque comme Gesture Detector qui permet de détecter toute sorte d'événements indépendamment de ce qui est implémenté pour l'objet. On peut consulter la liste des événements d'un objet en tapant Sub, espace puis Tab.

Pour l'exemple qui suit, on va se passer de l'événement Touch et utiliser les événements Up et Down du bouton (qui sont eux-mêmes basés sur l'événement Touch), mais je vous les déconseille car le code derrière est, disons, étrange (vous verrez qu'ils ont un fonctionnement qui ne correspond pas tout à fait à leur description).

Pour qu'une action quelconque puisse se répéter dans le temps, il faut bien évidemment quelque chose qui provoque cette répétition. Soit une action de l'utilisateur, soit une minuterie. Comme l'interrupteur des toilettes :)

Dans le cas présent, on va utiliser une minuterie puisqu'il n'y a qu'une action utilisateur attendue: l'appui sur un bouton (et bien évidemment le relâchement du bouton, qui mettra fin au processus).

B4X:
Sub Process_Globals
   Dim Minut As Timer
End Sub

Sub Globals
   Dim Btn As Button
End Sub

Sub Btn_Down
   Minut.Initialize("Minut", 500) ' La minuterie se declenchera toutes les 500 millisecondes
   Minut.Enabled = True 'La minuterie est enclenchee (elle declenchera l'evenement Tick)
End Sub

Sub Btn_Up
   Minut.Enabled = False 'J'arrete la minuterie
End Sub

Sub Minut_Tick
   'Ici je fais l'action a repeter
End Sub

Je vous conseille aussi d'ajouter ce bout de code pour arrêter automatiquement la minuterie quand l'appli perd la main:
B4X:
Sub Activity_Pause(UserClosed As Boolean)
   Minut.Enabled = False
End Sub
 
Last edited:

jp02

Member
Licensed User
Longtime User
pan sur le bec j'avais mal lu !

la doc Beginners'guide, pour un français est un peu fastidieuse, mais elle est très utile le tableau Event/View de la page 220 (attention aux versions qui changent régulièrement je parle de la 2.4) permet de savoir comment les outils réagissent, en effet Les boutons n'ont pas d'événement (Events) Touch. comme le dit Informatrix.
JP
 

brossden69

Member
Licensed User
Longtime User
Exemple :

Créer un Layout "Ecran" avec un Label "Compteur" et deux boutons "Plus" et "Moins"
Code :
B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region
 
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region
 
Sub Process_Globals
    Dim Ti As Timer
End Sub
 
Sub Globals
    Dim Compteur As Label
    Dim Plus, Moins As Button
    Dim cpt As Int
   
End Sub
 
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("ecran")
    Ti.Initialize("Ti",200)
End Sub
 
Sub Plus_Down
    cpt = 1
    Ti.Enabled =True
End Sub
 
Sub Plus_Up
    Ti.Enabled =False
End Sub
 
Sub Moins_Down
    cpt = -1
    Ti.Enabled =True
End Sub
 
 Sub Moins_Up
    Ti.Enabled =False
End Sub
 
Sub Ti_Tick
    Compteur.Text = Compteur.Text + 1*cpt
End Sub
 
Top