Italian Come azzerare lo stack della pressione dei tasti?

Dominex

Active Member
Licensed User
Longtime User
Come posso fare per azzerare dopo la prima pressione, ad esempio del tasto BACK, tutte le eventuali altre pressioni?

Queste altrimenti rimangono nello stack, del tipo che se premo tre volte ripetutamente il tasto mi fa l'evento tre volte. Io vorrei azzerarlo dopo la prima pressione così evito le ripetizioni.
 

Dominex

Active Member
Licensed User
Longtime User
Credo di aver trovato una soluzione appropriata:

B4X:
Sub Globals
   Dim tempKeyPress As Long
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean
   If DateTime.Now - tempKeyPress < 500 Then
    KeyCode = 0      
    Return True
   End If
End Sub

"500" è un valore in millisecondi che equivale al lasso di tempo che deve intercorrere tra una pressione e l'altra di un tasto affinché venga considerata. Durante il lasso di tempo impostato gli eventuali altri input dei tasti vengono ingnorati.
 
Last edited:

Dominex

Active Member
Licensed User
Longtime User

Dominex

Active Member
Licensed User
Longtime User
Francamente non sono riuscito bene a capire come fare a scrivere un codice per svuotare lo stack. Qualcuno è in grado di darmi un aiutino? :sign0085:

In verità il mio problema principale riguarda il tasto BACK che se lo premo ripetutamente non riesco a fermarlo.
 
Last edited:

anallie0

Active Member
Licensed User
Longtime User
puoi settare una variabile quando tocchi la prima volta, poi controlli se la variabile è settata non gestisci il tasto altrimenti se non è settata fai quello che devi. La variabile poi la puoi resettare quando vuoi da qualunque parte del codice.
:)
 

Dominex

Active Member
Licensed User
Longtime User
puoi settare una variabile quando tocchi la prima volta, poi controlli se la variabile è settata non gestisci il tasto altrimenti se non è settata fai quello che devi. La variabile poi la puoi resettare quando vuoi da qualunque parte del codice.
:)

Ho già provato cose simili, il problema è che non riesco a impedire l'evento del tasto Back se non voglio che avvenga.

Inviato da mio Samsung Galaxy S II
 

anallie0

Active Member
Licensed User
Longtime User
B4X:
Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
Dim stato As Boolean
Dim label1 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)

End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean

   Dim inutile As Int
   
    If KeyCode = KeyCodes.KEYCODE_BACK Then          'intercettazione del tasto back
            If stato = False  Then                 'se la variabile stato è false    
                label1.text = "falso" : stato = True   'carica il testo e mette la variabile stato a true
            Return True
         End If
            If stato = True Then                'se stato = true   
                inutile=1                        'mette a 1 una variabile d'appoggio 
            Return True
         End If         
                                             'poi puoi resettare a false la variabile stato in qualunque parte del
                                          'codice dove ti serve.
    
        End If
    
   End Sub

Sarà un pò grossolano e poco professionale ma funziona :)
 
Last edited:

Dominex

Active Member
Licensed User
Longtime User
Quello che a me serve, è riuscire a svuotare lo stack in modo che il tasto Back non venga applicato più di una volta ogni mezzo secondo ad esempio. Tutte le pressioni in eccedenza devono essere cancellate.

Il problema non è tanto inibire probabilmente l'evento Back come col tuo codice, ma svuotare la coda.

B4X:
If Stato = False  Then   
  ToastMessageShow(Stato,False)
  StatoBack = True
  Return True
  End If
If Stato = True Then
  ToastMessageShow(Stato,False)
  temp=1
  Return True
End If

Questo sopra che è in pratica il tuo codice, con i ToastMessageShow ti farà vedere che se premi ripetutamente il tasto Back rimarrà la coda dello stack anche se nel frattempo lo stai bloccando.

Non pensavo fosse così complicato.
 
Last edited:

anallie0

Active Member
Licensed User
Longtime User
il tasto non viene inibito perchè in ogni caso gli fai mettere a 1 una variabile, poi con i messaggi vedi solo che la variabile stato è a 1.
:)
 

Dominex

Active Member
Licensed User
Longtime User
il tasto non viene inibito perchè in ogni caso gli fai mettere a 1 una variabile, poi con i messaggi vedi solo che la variabile stato è a 1.
:)

Il mio intento è eliminare la coda. Forse mi è venuta in mente un'idea che risolverà la cosa... appena avrò tempo di mettermici. :BangHead:
 
Top