Comprensione ed elaborazione degli eventi della tastiera in Delphi

OnKeyDown, OnKeyUp e OnKeyPress

Eventi della tastiera, insieme aeventi del mouse, sono gli elementi primari dell'interazione di un utente con il tuo programma.





Di seguito sono riportate informazioni su tre eventi che consentono di acquisire le sequenze di tasti di un utente in un'applicazione Delphi: OnKeyDown , OnKeyUp e OnKeyPress .

Giù, Su, Premi, Giù, Su, Premi...

Le applicazioni Delphi possono utilizzare due metodi per ricevere l'input dalla tastiera. Se un utente deve digitare qualcosa in un'applicazione, il modo più semplice per ricevere quell'input consiste nell'usare uno dei controlli che risponde automaticamente alla pressione dei tasti, ad esempio Modifica.



Altre volte e per scopi più generali, invece, possiamo creare procedure in un form che gestisca tre eventi riconosciuti dai form e da qualsiasi componente che accetti l'input da tastiera. Possiamo scrivere gestori di eventi per questi eventi per rispondere a qualsiasi chiave o combinazione di tasti che l'utente potrebbe premere in fase di esecuzione.

Ecco quegli eventi:



OnKeyDown - chiamato quando viene premuto un tasto qualsiasi della tastiera
OnKeyUp - chiamato quando viene rilasciato un tasto qualsiasi della tastiera
OnKeyPress - chiamato quando viene premuto un tasto corrispondente ad un carattere ASCII

Gestori di tastiera

Tutti gli eventi della tastiera ne hanno uno parametro in comune. Il Chiave parametro è il tasto della tastiera e serve per passare per riferimento al valore del tasto premuto. Il Spostare parametro (nel OnKeyDown e OnKeyUp procedure) indica se i tasti Maiusc, Alt o Ctrl sono combinati con la sequenza di tasti.

IlParametro mittentefa riferimento al controllo utilizzato per chiamare il metodo.

|_+_|

La risposta quando l'utente preme i tasti di scelta rapida o acceleratore, come quelli forniti con i comandi di menu, non richiede la scrittura di gestori di eventi.



Che cos'è la messa a fuoco?

Focus è la capacità di ricevere l'input dell'utente attraverso iltopoo tastiera. Solo l'oggetto che ha lo stato attivo può ricevere un evento della tastiera. Inoltre, un solo componente per modulo può essere attivo o avere lo stato attivo in un'applicazione in esecuzione in un dato momento.

Alcuni componenti, come Immagine , TPaintBox , Pannello T e Etichetta T non può ricevere la messa a fuoco. In generale, componenti derivati ​​da TGraphicControl non sono in grado di ricevere la messa a fuoco. Inoltre, i componenti che sono invisibili in fase di esecuzione ( TTimer ) non può ricevere la messa a fuoco.



OnKeyDown, OnKeyUp

Il OnKeyDown e OnKeyUp gli eventi forniscono il livello più basso di risposta della tastiera. Tutti e due OnKeyDown e OnKeyUp i gestori possono rispondere a tutti i tasti della tastiera, inclusi i tasti funzione e i tasti combinati con il Spostare , Tutto quanto , e Ctrl chiavi.

Gli eventi della tastiera non si escludono a vicenda. Quando l'utente preme un tasto, entrambi i OnKeyDown e OnKeyPress vengono generati eventi e quando l'utente rilascia la chiave, il OnKeyUp viene generato l'evento. Quando l'utente preme uno dei tasti che OnKeyPress non rileva, solo il OnKeyDown si verifica l'evento, seguito dal OnKeyUp evento.



Se tieni premuto un tasto, il OnKeyUp l'evento si verifica dopo tutto il OnKeyDown e OnKeyPress si sono verificati eventi.

OnKeyPress

OnKeyPress restituisce un carattere ASCII diverso per 'g' e 'G', ma OnKeyDown e OnKeyUp non fare distinzione tra tasti alfabetici maiuscoli e minuscoli.



Parametri chiave e spostamento

Dal momento che il Chiave parametro viene passato per riferimento, il gestore dell'evento può cambiare Chiave in modo che l'applicazione veda una chiave diversa come coinvolta nell'evento. Questo è un modo per limitare i tipi di caratteri che l'utente può inserire, ad esempio per impedire agli utenti di digitare chiavi alfabetiche.

|_+_|

La dichiarazione di cui sopra verifica se il Chiave parametro è nell'unione di due insiemi: caratteri minuscoli (es. un attraverso Insieme a ) e caratteri maiuscoli ( A-Z ). In tal caso, l'istruzione assegna il valore del carattere zero a Chiave per impedire qualsiasi input nel Modificare componente, ad esempio, quando riceve la chiave modificata.

Per le chiavi non alfanumeriche, WinAPI codici chiave virtuali può essere utilizzato per determinare il tasto premuto. Windows definisce costanti speciali per ogni tasto che l'utente può premere. Per esempio, VK_RIGHT è il codice chiave virtuale per il tasto freccia destra.

Per ottenere lo stato chiave di alcune chiavi speciali come TAB o Pagina su , possiamo usare il GetKeyStato Chiamata API di Windows. Lo stato del tasto specifica se il tasto è su, giù o commutato (attivo o disattivo, alternato ogni volta che si preme il tasto).

|_+_|

Nel OnKeyDown e OnKeyUp eventi, Chiave è un valore di Word senza segno che rappresenta una chiave virtuale di Windows. Per ottenere il valore del carattere da Chiave , noi usiamo il Chr funzione. Nel OnKeyPress evento, Chiave è un Char valore che rappresenta un carattere ASCII.

Tutti e due OnKeyDown e OnKeyUp gli eventi utilizzano il parametro Shift, di tipo TShiftState , un set contrassegna per determinare lo stato dei tasti Alt, Ctrl e Maiusc quando viene premuto un tasto.

Ad esempio, quando si preme Ctrl + A, vengono generati i seguenti eventi chiave:

|_+_|

Reindirizzamento degli eventi della tastiera al modulo

Per intercettare le sequenze di tasti a livello di modulo invece di passarle ai componenti del modulo, impostare il modulo Anteprima chiave proprietà su True (usando il Ispettore oggetti ). Il componente continua a vedere l'evento, ma il modulo ha l'opportunità di gestirlo prima, ad esempio per consentire o impedire la pressione di alcuni tasti.

Si supponga di avere diversi componenti Modifica su un modulo e il file Form.OnKeyPress la procedura è simile a:

|_+_|

Se uno dei componenti Modifica ha il Messa a fuoco, e il Anteprima chiave proprietà di un modulo è False, questo codice non verrà eseguito. In altre parole, se l'utente preme il tasto 5 chiave, il 5 il personaggio apparirà nel componente Modifica focalizzato.

Tuttavia, se il Anteprima chiave è impostato su True, quindi il modulo OnKeyPress l'evento viene eseguito prima che il componente Modifica veda il tasto premuto. Anche in questo caso, se l'utente ha premuto il tasto 5 chiave, quindi assegna il valore del carattere zero a Chiave per impedire l'immissione numerica nel componente Modifica.