Differenze tra le versioni di "Impedire che cliccando su un tasto della tastiera si produca più volte il medesimo effetto"
(2 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>[[[#Note|nota 1]]]</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 | + | 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() | |
If status == 0 Then | If status == 0 Then | ||
Riga 12: | Riga 14: | ||
Endif | Endif | ||
− | + | End | |
+ | |||
− | + | Public Sub Form_KeyRelease() | |
Print "Tasto rilasciato" | Print "Tasto rilasciato" | ||
Riga 20: | Riga 23: | ||
status = 0 | 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": | 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 | Private status As Byte | ||
− | + | Public Sub Form_KeyPress() | |
If status == 1 Then <FONT Color=#B22222>Return</font> | If status == 1 Then <FONT Color=#B22222>Return</font> | ||
Riga 32: | Riga 35: | ||
status = 1 | status = 1 | ||
− | + | End | |
+ | |||
− | + | Public Sub Form_KeyRelease() | |
Print "Tasto rilasciato" | Print "Tasto rilasciato" | ||
Riga 40: | Riga 44: | ||
status = 0 | status = 0 | ||
− | '''End''' | + | 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