Differenze tra le versioni di "KeyPress() - KeyRelease() - Key"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Con gli Eventi '''_KeyPress()''' e '''_KeyRelease()''' è possibile interagire con il programma Gambas mediante la tastiera del computer. "_KeyPress()" intercetta l'Evento de...")
 
 
(13 versioni intermedie di uno stesso utente non sono mostrate)
Riga 9: Riga 9:
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
   Dim a as string
+
   Dim s as string
 
   
 
   
  <FONT color=#006400>' ''Acquisisce il testo della chiave (il tasto premuto):''</font>
+
  <FONT color=gray>' ''Acquisisce il testo della chiave (il tasto premuto):''</font>
   a = Key.Text
+
   s = Key.Text
 
   
 
   
   Print "E' stato premuto il tasto: "; a
+
   Print "E' stato premuto il tasto: "; s
 
   
 
   
 
  End
 
  End
Riga 21: Riga 21:
 
  Public Sub Form_keyRelease()
 
  Public Sub Form_keyRelease()
 
   
 
   
   Dim b as string
+
   Dim s as string
 
   
 
   
  <FONT color=#006400>' ''Acquisisce il testo della chiave (il tasto schiacciato):''</font>
+
  <FONT color=gray>' ''Acquisisce il testo della chiave (il tasto schiacciato):''</font>
   b = Key.Text
+
   s = Key.Text
 
   
 
   
   Print "E' stato rilasciato il tasto: ";  b
+
   Print "E' stato rilasciato il tasto: ";  s
 
   
 
   
 
  End
 
  End
 
E' possibile ovviamente utilizzare gli Eventi "_Keypress()" e "_Keyrelease()" di un Oggetto grafico qualsiasi che li supporti (ad esempio un ''Button''). Anche in questo caso, affinché detti Eventi possano essere sollevati, è necessario che l'Oggetto, ad esso legati, abbia in quel momento il ''Focus''.
 
E' possibile ovviamente utilizzare gli Eventi "_Keypress()" e "_Keyrelease()" di un Oggetto grafico qualsiasi che li supporti (ad esempio un ''Button''). Anche in questo caso, affinché detti Eventi possano essere sollevati, è necessario che l'Oggetto, ad esso legati, abbia in quel momento il ''Focus''.
  
===Altre modalità di utilizzo della funzione ''key''===
+
==Altre modalità di utilizzo della funzione ''key''==
<FONT color=#B22222><B>1 -</b></font>
 
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
  <FONT color=#006400>' ''Se viene premuto il tasto del carattere “R”:''</font>
+
  <FONT color=gray>' ''Se viene premuto il tasto del carattere “R”:''</font>
 
   If Key.Code = Key["R"] Then Print "E' stato premuto il tasto della lettera \"R\"."
 
   If Key.Code = Key["R"] Then Print "E' stato premuto il tasto della lettera \"R\"."
 
   
 
   
Riga 42: Riga 41:
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
  <FONT color=#006400>' ''Se viene premuto il tastino della freccia a destra:''</font>
+
  <FONT color=gray>' ''Se viene premuto il tastino della freccia a destra:''</font>
 
   If Key.Code = Key["Right"] Then Print "E' stato premuto il tasto \"Right\"."
 
   If Key.Code = Key["Right"] Then Print "E' stato premuto il tasto \"Right\"."
o anche così:
 
  If Key.Code = Key.Right Then Print "E' stato premuto il tasto \"Right\"."
 
 
   
 
   
 
  End
 
  End
====Intercettando il tasto "''Control'' " + un altro tasto====
+
o anche così:
Qui intercettando il tasto "Control" + il tasto "R":
 
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
<FONT color=#006400>' ''Se viene premuto il tasto "Control" + il tasto della lettera "R":''</font>
+
   If Key.Code = Key.Right Then Print "E' stato premuto il tasto \"Right\"."
   If Key.Code = Key["R"] And Key.Control Then Print "Hai premuto CTRL+R"
 
 
   
 
   
 
  End
 
  End
Qui intercettando il tasto "Control" + il tasto "!":
 
  If Key.Code = Key["!"] And Key.Control Then Print "E' stato premuto il tasto \"Control\" + il tasto \"!\""
 
 
Qui intercettando il tasto "Return" della tastiera madre o il tasto "Enter" della tastierina numerica:
 
Qui intercettando il tasto "Return" della tastiera madre o il tasto "Enter" della tastierina numerica:
 
   If (key.Code = Key["Return"]) Or (key.Code = Key["Enter"]) Then
 
   If (key.Code = Key["Return"]) Or (key.Code = Key["Enter"]) Then
Riga 66: Riga 59:
 
     Print "E' stato premuto il tasto \"Invio\"."
 
     Print "E' stato premuto il tasto \"Invio\"."
 
   Endif
 
   Endif
Qui intercettando il tasto "Shift" + il tasto "Canc" della tastierina numerica:
 
  If Key.Code = Key["Delete"] Then Print "E' stato premuto il tasto \"Canc\" della tstierina numerica."
 
 
o anche così:
 
o anche così:
  If Key.Code = Key.Delete Then Print "E' stato premuto il tasto \"Canc\" della tstierina numerica."
 
<FONT color=#B22222><B>2 -</b></font>
 
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
<FONT color=#006400>' ''Se viene premuto uno dei due tasti "Invio":''</font>
 
 
   Select Case Key.Code
 
   Select Case Key.Code
 
     Case Key.Enter, Key.Return
 
     Case Key.Enter, Key.Return
Riga 80: Riga 68:
 
   
 
   
 
  End
 
  End
<FONT color=#B22222><B>3 -</b></font>
+
 
 +
Qui intercettando il tasto "TAB":
 +
Public Sub Form_KeyPress()
 +
 +
  If Key.Code = Key.Tab Then Print "E' stato premuto il tasto \"TAB\" !"
 +
 +
End
 +
 
 +
Qui intercettando il numero del codice del tasto premuto:
 
  Public Sub Form_KeyPress()
 
  Public Sub Form_KeyPress()
 
   
 
   
  <FONT color=#006400>' ''Si prende in considerazione il numero del codice del tasto premuto, che - in questo caso - corrisponde al numero di codice ASCII del carattere collegato al tasto premuto:''</font>
+
  <FONT color=gray>' ''Si prende in considerazione il numero del codice del tasto premuto, che - in questo caso - corrisponde al numero di codice ASCII del carattere collegato al tasto premuto:''</font>
 
   If Key.Code = 65 then Print "E' stato premuto il tasto con il carattere \"A\"."
 
   If Key.Code = 65 then Print "E' stato premuto il tasto con il carattere \"A\"."
 
   
 
   
 
  End
 
  End
  
===Utilizzare la Classe ''Window''===
+
===Intercettando la pressione di due o tre tasti combinata in sequenza===
 +
====Intercettando il tasto "''Control'' " + un altro tasto====
 +
Qui intercettando il tasto "Control" + il tasto "R":
 +
Public Sub Form_KeyPress()
 +
 +
<FONT color=gray>' ''Se viene premuto il tasto "Control" ("Ctrl") + il tasto della lettera "R":''</font>
 +
  If Key.Code = Key["R"] And Key.Control Then Print "Hai premuto CTRL+R"
 +
 +
End
 +
Qui intercettando il tasto "Control" + il tasto "!":
 +
  If Key.Code = Key["!"] And Key.Control Then Print "E' stato premuto il tasto \"Control\" + il tasto \"!\""
 +
 
 +
====Intercettando il tasto "Shift" + un altro tasto====
 +
Si possono avere due casi:
 +
<BR>'''1''') per intercettare la pressione del tasto "Shift" + un altro tasto è prevista una unica specifica Costante della Classe ''Key''.
 +
<BR>Il caso è ad esempio quello del tasto "BackTab", che si ottiene premendo in sequenza il tasto "Shift" + il tasto "TAB".
 +
<BR>Ebbene, per intercettare questo effetto in Gambas, basterà impostare la specifica Costante prevista appunto dalla Classe ''Key'': "Key<FONT Color=red>.BackTab</font>".
 +
<BR>Esempio pratico:
 +
If Key.Code = Key<FONT Color=red>.BackTab</font> Then Print "E' stato premuto il tasto \"BACKTAB\" ("hift" + "Tab" !"
 +
 
 +
<BR>'''2''') per intercettare la pressione del tasto "Shift" + un altro tasto, bisognerà prendere in considerazione tali ''due'' tasti premuti della tastiera.
 +
<BR>In tal caso, per intercettare la pressione combinata del tasto "Shift" con un altro tasto, bisognerà impostare la Costante "<FONT Color=red>.Shift</font>".
 +
<BR>In particolare nella riga del condizionale va posto <U>prima il riferimento al tasto generico prescelto</u> e dopo l'operatore ''AND'' va posto il riferimento al tasto "Shift":
 +
If Key.Code = '''Key["R"] <FONT Color=green>And</font> Key.Shift''' Then ......
 +
In questo esempio si intercetta la pressione del tasto "Shift" + il tasto "R":
 +
Public Sub Form_KeyPress()
 +
 +
<FONT color=gray>' ''Se viene premuto il tasto "Shift" + il tasto della lettera "R":''</font>
 +
  If Key.Code = Key["R"] And Key<FONT color=red>.Shift</font> Then Print "Hai premuto Shift+R !"
 +
 +
End
 +
 
 +
====Intercettando tre tasti: "Control" + "Shift" + un altro tasto====
 +
In ordine alla pressione di tre tasti nella riga del condizionale va posto <U>prima il riferimento al tasto generico prescelto</u>, dopo vanno posti i riferimenti ai tasti "Control" e "Shift" con i rispettivi operatori ''AND'':
 +
Public Sub Form_KeyPress()
 +
 +
<FONT color=gray>' ''Se viene premuto il tasto "Control" + il tasto "Shift" + il tasto della lettera "F":''</font>
 +
  If Key.Code = Key["F"] And Key.Control And Key.Shift Then Print "Hai premuto in modo combinato i tasti: Control+Shift+F !"
 +
 +
End
 +
 
 +
 
 +
==Utilizzare la Classe ''Window''==
 
Se non si intende utilizzare il ''Form'', né un controllo specifico insistente sul ''Form'', è possibile servirsi della Classe ''Window'' creando una finestra virtuale, che sarà gestita mediante una variabile:
 
Se non si intende utilizzare il ''Form'', né un controllo specifico insistente sul ''Form'', è possibile servirsi della Classe ''Window'' creando una finestra virtuale, che sarà gestita mediante una variabile:
 
  Private w As <FONT color=#B22222>Window</font>
 
  Private w As <FONT color=#B22222>Window</font>
Riga 96: Riga 134:
 
    
 
    
 
   With w = New Window(FMain) As "Evento"
 
   With w = New Window(FMain) As "Evento"
  <FONT color=#006400>' ''Diamo il "focus" alla finestra virtuale:''</font>
+
  <FONT color=gray>' ''Si dà il "focus" alla finestra virtuale:''</font>
 
     .SetFocus
 
     .SetFocus
 
   End With
 
   End With
Riga 104: Riga 142:
 
    
 
    
 
  Public Sub Evento_keyPress()
 
  Public Sub Evento_keyPress()
 
+
 +
<FONT color=gray>' ''Se si preme il tasto "R" della tastiera, lo rileva in console:''</font>
 
   If Key.Code = key["R"] Then Print "Evento sollevato: tasto \"R\" premuto !"
 
   If Key.Code = key["R"] Then Print "Evento sollevato: tasto \"R\" premuto !"
 
      
 
      
 
  End
 
  End

Versione attuale delle 04:47, 16 lug 2024

Con gli Eventi _KeyPress() e _KeyRelease() è possibile interagire con il programma Gambas mediante la tastiera del computer.

"_KeyPress()" intercetta l'Evento dello schiacciamento di uno o più tasti della tastiera, e sin tanto che essi vengono mantenuti premuti.

"_KeyRelease()" intercetta invece il rilascio del tasto.


Per intercettare genericamente ogni Evento legato alla pressione di un tasto della tastiera, si legheranno gli Eventi "_KeyPress()" e "_KeyRelease()" al Form, il quale dovrà avere in quel momento il Focus.

Public Sub Form_KeyPress()

 Dim s as string

' Acquisisce il testo della chiave (il tasto premuto):
 s = Key.Text

 Print "E' stato premuto il tasto: "; s

End


Public Sub Form_keyRelease()

 Dim s as string

' Acquisisce il testo della chiave (il tasto schiacciato):
 s = Key.Text

 Print "E' stato rilasciato il tasto: ";  s

End

E' possibile ovviamente utilizzare gli Eventi "_Keypress()" e "_Keyrelease()" di un Oggetto grafico qualsiasi che li supporti (ad esempio un Button). Anche in questo caso, affinché detti Eventi possano essere sollevati, è necessario che l'Oggetto, ad esso legati, abbia in quel momento il Focus.

Altre modalità di utilizzo della funzione key

Public Sub Form_KeyPress()

' Se viene premuto il tasto del carattere “R”:
 If Key.Code = Key["R"] Then Print "E' stato premuto il tasto della lettera \"R\"."

End

Qui intercettando il tasto freccia a "destra":

Public Sub Form_KeyPress()

' Se viene premuto il tastino della freccia a destra:
 If Key.Code = Key["Right"] Then Print "E' stato premuto il tasto \"Right\"."

End

o anche così:

Public Sub Form_KeyPress()

 If Key.Code = Key.Right Then Print "E' stato premuto il tasto \"Right\"."

End

Qui intercettando il tasto "Return" della tastiera madre o il tasto "Enter" della tastierina numerica:

 If (key.Code = Key["Return"]) Or (key.Code = Key["Enter"]) Then
   Print "E' stato premuto il tasto \"Invio\"."
 Endif

o anche così:

 If (key.Code = Key.Return) Or (key.Code = Key.Enter) Then
   Print "E' stato premuto il tasto \"Invio\"."
 Endif

o anche così:

Public Sub Form_KeyPress()

 Select Case Key.Code
   Case Key.Enter, Key.Return
     Print "E' stato premuto il tasto \"Invio\"."
 End Select

End

Qui intercettando il tasto "TAB":

Public Sub Form_KeyPress()

 If Key.Code = Key.Tab Then Print "E' stato premuto il tasto \"TAB\" !"

End

Qui intercettando il numero del codice del tasto premuto:

Public Sub Form_KeyPress()

' Si prende in considerazione il numero del codice del tasto premuto, che - in questo caso - corrisponde al numero di codice ASCII del carattere collegato al tasto premuto:
 If Key.Code = 65 then Print "E' stato premuto il tasto con il carattere \"A\"."

End

Intercettando la pressione di due o tre tasti combinata in sequenza

Intercettando il tasto "Control " + un altro tasto

Qui intercettando il tasto "Control" + il tasto "R":

Public Sub Form_KeyPress()

' Se viene premuto il tasto "Control" ("Ctrl") + il tasto della lettera "R":
 If Key.Code = Key["R"] And Key.Control Then Print "Hai premuto CTRL+R"

End

Qui intercettando il tasto "Control" + il tasto "!":

 If Key.Code = Key["!"] And Key.Control Then Print "E' stato premuto il tasto \"Control\" + il tasto \"!\""

Intercettando il tasto "Shift" + un altro tasto

Si possono avere due casi:
1) per intercettare la pressione del tasto "Shift" + un altro tasto è prevista una unica specifica Costante della Classe Key.
Il caso è ad esempio quello del tasto "BackTab", che si ottiene premendo in sequenza il tasto "Shift" + il tasto "TAB".
Ebbene, per intercettare questo effetto in Gambas, basterà impostare la specifica Costante prevista appunto dalla Classe Key: "Key.BackTab".
Esempio pratico:

If Key.Code = Key.BackTab Then Print "E' stato premuto il tasto \"BACKTAB\" ("hift" + "Tab" !"


2) per intercettare la pressione del tasto "Shift" + un altro tasto, bisognerà prendere in considerazione tali due tasti premuti della tastiera.
In tal caso, per intercettare la pressione combinata del tasto "Shift" con un altro tasto, bisognerà impostare la Costante ".Shift".
In particolare nella riga del condizionale va posto prima il riferimento al tasto generico prescelto e dopo l'operatore AND va posto il riferimento al tasto "Shift":

If Key.Code = Key["R"] And Key.Shift Then ......

In questo esempio si intercetta la pressione del tasto "Shift" + il tasto "R":

Public Sub Form_KeyPress()

' Se viene premuto il tasto "Shift" + il tasto della lettera "R":
 If Key.Code = Key["R"] And Key.Shift Then Print "Hai premuto Shift+R !"

End

Intercettando tre tasti: "Control" + "Shift" + un altro tasto

In ordine alla pressione di tre tasti nella riga del condizionale va posto prima il riferimento al tasto generico prescelto, dopo vanno posti i riferimenti ai tasti "Control" e "Shift" con i rispettivi operatori AND:

Public Sub Form_KeyPress()

' Se viene premuto il tasto "Control" + il tasto "Shift" + il tasto della lettera "F":
 If Key.Code = Key["F"] And Key.Control And Key.Shift Then Print "Hai premuto in modo combinato i tasti: Control+Shift+F !"

End


Utilizzare la Classe Window

Se non si intende utilizzare il Form, né un controllo specifico insistente sul Form, è possibile servirsi della Classe Window creando una finestra virtuale, che sarà gestita mediante una variabile:

Private w As Window


Public Sub Form_Open()
 
 With w = New Window(FMain) As "Evento"
' Si dà il "focus" alla finestra virtuale:
   .SetFocus
 End With
 
End

 
Public Sub Evento_keyPress()

' Se si preme il tasto "R" della tastiera, lo rileva in console:
 If Key.Code = key["R"] Then Print "Evento sollevato: tasto \"R\" premuto !"
   
End