Differenze tra le versioni di "Impedire che cliccando su un tasto della tastiera si produca più volte il medesimo effetto"

Da Gambas-it.org - Wikipedia.
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Sappiamo che, utilizzando l'evento ''_KeyPress()'', allo scatenarsi di tale evento un comando presente nelle sua routine si scatena ripetutamente sino a quando il tasto non verrà rilasciato.
+
Sappiamo che, utilizzando l'Evento "_KeyPress()", allo scatenarsi di tale evento un comando presente nelle sua routine si scatena ripetutamente sino a quando il tasto non verrà rilasciato. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
Per ovviare a questo problema, e quindi per far produrre solo una volta l'effetto di quanto previsto nella routine dell'evento ''_KeyPress()'', possiamo adottare un codice come il seguente:
+
Per ovviare a questo problema, e quindi per far produrre solo una volta l'effetto di quanto previsto nella routine dell'Evento "_KeyPress()", possiamo adottare alcune moalità.
 +
 
 +
Il seguente codice ingloba il codice fondamentale - presente nell'Evento "_KeyPress()" - all'interno della procedura condizionale "IF":
 
  Private status As Byte
 
  Private status As Byte
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_KeyPress()
+
  Public Sub Form_KeyPress()
 
    
 
    
   If status = 0 Then
+
   If status == 0 Then
 
     Print "Produzione effetto"
 
     Print "Produzione effetto"
 
     status = 1
 
     status = 1
 
   Endif
 
   Endif
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_KeyRelease()
+
  Public Sub Form_KeyRelease()
 
    
 
    
 
   Print "Tasto rilasciato"
 
   Print "Tasto rilasciato"
Riga 21: Riga 23:
 
   status = 0
 
   status = 0
 
      
 
      
  '''End'''
+
  End
 +
oppure quest'altro analogo, facendo uscire il controllo dalla routine dell'Evento "_KeyPress()" nel caso di verifica della condizione posta con "IF":
 +
Private status As Byte
 +
 +
 +
Public Sub Form_KeyPress()
 +
 
 +
  If status == 1 Then <FONT Color=#B22222>Return</font>
 +
 
 +
  Print "Produzione effetto"
 +
  status = 1
 +
 +
End
 +
 +
 +
Public Sub Form_KeyRelease()
 +
 +
  Print "Tasto rilasciato"
 +
 +
  status = 0
 +
 +
End
 +
Il seguente codice prevede l'uso dei Metodi "Object.Lock()" e "Object.Unlock()" applicati a un Controllo grafico posto sul ''Form'' (In questo caso se usassimo il ''Form'' per scatenare entrambi gli Eventi "_KeyPress()" e "_KeyRelease()", impostando il Metodo "Object.Lock(Me)" nella routine "Form_KeyPress()", l'Evento "Form_KeyRelease()" non potrebbe ovviamente sollevarsi. Pertanto dobbiamo usare un Controllo grafico d'appoggio).
 +
Public Sub Button1_KeyPress()
 +
 +
  Print "Tasto premuto"
 +
 +
<FONT Color=gray>' '''''Blocca''' gli Eventi del "Button1", affinché l'Evento "_KeyPress()" non si ripeta qualora si continui a tenere premuto un tasto della tastiera:''</font>
 +
  Object.Lock(Button1)
 +
 +
End
 +
 +
 +
Public Sub Form_KeyRelease() <FONT Color=gray>' ''Questo Evento può sempre sollevarsi''</font>
 +
 +
  Print "Tasto rilasciato"
 +
 +
<FONT Color=gray>' '''''Sblocca''' gli Eventi del "Button1", affinché l'Evento "_KeyPress()" possa essere sollevato nuovamente:''</font>
 +
  Object.Unlock(Button1)
 +
 +
End
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Vedere anche questa pagina: [[Impedire, mentre si tiene premuto un tasto della tastiera, si produca il medesimo effetto cliccando su un altro tasto]]

Versione attuale delle 18:12, 1 nov 2023

Sappiamo che, utilizzando l'Evento "_KeyPress()", allo scatenarsi di tale evento un comando presente nelle sua routine si scatena ripetutamente sino a quando il tasto non verrà rilasciato. [nota 1]

Per ovviare a questo problema, e quindi per far produrre solo una volta l'effetto di quanto previsto nella routine dell'Evento "_KeyPress()", possiamo adottare alcune moalità.

Il seguente codice ingloba il codice fondamentale - presente nell'Evento "_KeyPress()" - all'interno della procedura condizionale "IF":

Private status As Byte


Public Sub Form_KeyPress()
 
 If status == 0 Then
   Print "Produzione effetto"
   status = 1
 Endif
 
End


Public Sub Form_KeyRelease()
 
 Print "Tasto rilasciato"
 
 status = 0
   
End

oppure quest'altro analogo, facendo uscire il controllo dalla routine dell'Evento "_KeyPress()" nel caso di verifica della condizione posta con "IF":

Private status As Byte


Public Sub Form_KeyPress()
 
 If status == 1 Then Return
 
 Print "Produzione effetto"
 status = 1

End


Public Sub Form_KeyRelease()

 Print "Tasto rilasciato"

 status = 0

End

Il seguente codice prevede l'uso dei Metodi "Object.Lock()" e "Object.Unlock()" applicati a un Controllo grafico posto sul Form (In questo caso se usassimo il Form per scatenare entrambi gli Eventi "_KeyPress()" e "_KeyRelease()", impostando il Metodo "Object.Lock(Me)" nella routine "Form_KeyPress()", l'Evento "Form_KeyRelease()" non potrebbe ovviamente sollevarsi. Pertanto dobbiamo usare un Controllo grafico d'appoggio).

Public Sub Button1_KeyPress()

 Print "Tasto premuto"

' Blocca gli Eventi del "Button1", affinché l'Evento "_KeyPress()" non si ripeta qualora si continui a tenere premuto un tasto della tastiera:
 Object.Lock(Button1)

End


Public Sub Form_KeyRelease() ' Questo Evento può sempre sollevarsi

 Print "Tasto rilasciato"

' Sblocca gli Eventi del "Button1", affinché l'Evento "_KeyPress()" possa essere sollevato nuovamente:
 Object.Unlock(Button1)

End


Note

[1] Vedere anche questa pagina: Impedire, mentre si tiene premuto un tasto della tastiera, si produca il medesimo effetto cliccando su un altro tasto