Evenimentele de tastatură, împreună cu evenimentele de mouse, sunt elementele principale ale interacțiunii utilizatorului cu programul dvs..
Mai jos găsiți informații despre trei evenimente care vă permit să capturați apăsările de cheie ale unui utilizator într-o aplicație Delphi: onkeydown, onkeyup și onkeypress.
Aplicațiile Delphi pot utiliza două metode pentru primirea intrării de la tastatură. Dacă un utilizator trebuie să tasteze ceva într-o aplicație, cel mai simplu mod de a primi acea intrare este de a utiliza unul dintre controalele care răspund automat la apăsări de taste, cum ar fi Editare.
Cu alte ocazii și în scopuri mai generale, cu toate acestea, putem crea proceduri într-un formular care gestionează trei evenimente recunoscute de formulare și de orice componentă care acceptă introducerea tastaturii. Putem scrie manipulatoare de evenimente pentru aceste evenimente pentru a răspunde oricărei combinații de taste sau taste pe care utilizatorul le-ar putea apăsa la runtime.
Iată acele evenimente:
onkeydown - apelat la apăsarea oricărei taste de pe tastatură
onkeyup - apelat atunci când orice tastă de pe tastatură este eliberată
onkeypress - apelat atunci când este apăsată o tastă corespunzătoare unui caracter ASCII
Toate evenimentele de la tastatură au un parametru în comun. Cheie parametrul este tasta de pe tastatură și este utilizat pentru a trece prin referința valorii tastei apăsate. Schimb parametru (în onkeydown și onkeyup proceduri) indică dacă tastele Shift, Alt sau Ctrl sunt combinate cu apăsarea tastei.
Parametrul Sender face referire la controlul care a fost folosit pentru a apela metoda.
procedură TForm1.FormKeyDown (Expeditor: TObject; var Cheie: Cuvânt; Shift: TShiftState); ... procedură TForm1.FormKeyUp (Expeditor: TObject; var Cheie: Cuvânt; Shift: TShiftState); ... procedură TForm1.FormKeyPress (Expeditor: TObject; var Cheie: Char);
Răspunsul când utilizatorul apasă tastele rapide sau acceleratoare, cum ar fi cele furnizate cu comenzile de meniu, nu necesită scriere de gestionare a evenimentelor.
Focalizarea este capacitatea de a primi intrarea utilizatorului prin intermediul mouse-ului sau tastaturii. Doar obiectul focalizat poate primi un eveniment de la tastatură. De asemenea, o singură componentă pentru fiecare formular poate fi activă sau pune accentul într-o aplicație care rulează la un moment dat.
Unele componente, cum ar fi TImage, TPaintBox, TPanel și TLabel nu poate primi accent. În general, componente derivate din TGraphicControl nu sunt capabili să primească concentrare. În plus, componente care sunt invizibile în timpul rulării (TTimer) nu poate primi focus.
onkeydown și onkeyup evenimentele oferă cel mai scăzut nivel de răspuns al tastaturii. Ambii onkeydown și onkeyup operatorii pot răspunde la toate tastele tastaturii, inclusiv tastele funcționale și tastele combinate cu tasta Schimb, Alt, și Ctrl chei.
Evenimentele de pe tastatură nu se exclud reciproc. Când utilizatorul apasă o tastă, ambele onkeydown și onkeypress evenimentele sunt generate, iar atunci când utilizatorul eliberează cheia, onkeyup evenimentul este generat. Când utilizatorul apasă una dintre tastele care onkeypress nu detectează, doar onkeydown evenimentul are loc, urmat de onkeyup eveniment.
Dacă țineți apăsată o tastă, tasta onkeyup evenimentul are loc după toate onkeydown și onkeypress au avut loc evenimente.
OnKeyPress returnează un caracter ASCII diferit pentru „g” și „G”, dar onkeydown și onkeyup nu faceți distincția între tastele alfa majuscule și minuscule.
De când Cheie parametrul este trecut prin referință, managerul de evenimente se poate schimba Cheie astfel încât aplicația consideră o cheie diferită ca fiind implicată în eveniment. Aceasta este o modalitate de a limita tipurile de caractere pe care le poate introduce utilizatorul, precum împiedicarea utilizatorilor de a tasta tastele alfa.
dacă Cheie în ['a' ... 'z'] + ['A' ... 'Z'] apoi Cheie: = # 0
Declarația de mai sus verifică dacă Cheie parametrul este în uniunea a două seturi: caractere minuscule (adică. A prin z) și caractere mari (A-Z). Dacă da, instrucțiunea atribuie valoarea caracterului de la zero Cheie pentru a preveni orice intrare în Editați | × componentă, de exemplu, atunci când primește cheia modificată.
Pentru tastele non-alfanumerice, pentru a determina tasta apăsată pot fi utilizate coduri de taste virtuale WinAPI. Windows definește constantele speciale pentru fiecare tastă pe care utilizatorul o poate apăsa. De exemplu, VK_RIGHT este codul cheii virtuale pentru cheia săgeată dreapta.
Pentru a obține starea cheii a unor chei speciale cum ar fi TAB sau Pagină sus, putem folosi GetKeyState Apel API Windows. Starea cheii specifică dacă tasta este sus, jos sau comutat (pornit sau oprit - alternând de fiecare dată când este apăsată tasta).
dacă HiWord (GetKeyState (vk_PageUp)) 0 apoi ShowMessage ('PageUp - DOWN') altfel ShowMessage ('PageUp - UP');
În onkeydown și onkeyup evenimente, Cheie este o valoare Word nesemnată care reprezintă o cheie virtuală Windows. Pentru a obține valoarea personajului de la Cheie,noi folosim chr funcţie. În onkeypress eveniment, Cheie este un Carboniza valoare care reprezintă un caracter ASCII.
Ambii onkeydown și onkeyup evenimentele folosesc parametrul Shift, de tip TShiftState, un set de stegulețe pentru a determina starea tastelor Alt, Ctrl și Shift la apăsarea unei taste.
De exemplu, când apăsați Ctrl + A, sunt generate următoarele evenimente cheie:
KeyDown (Ctrl) // ssCtrl KeyDown (Ctrl + A) // ssCtrl + 'A' KeyPress (A) KeyUp (Ctrl + A)
Pentru a surprinde apăsările de taste la nivelul formularului în loc să le treci la componentele formularului, setați formularul KeyPreview proprietate către True (folosind funcția Inspector de obiecte). Componenta vede încă evenimentul, dar formularul are posibilitatea de a-l gestiona mai întâi - pentru a permite sau a nu permite apăsarea unor taste, de exemplu.
Să presupunem că aveți mai multe componente de editare pe un formular și Form.OnKeyPress procedura arată ca:
procedură TForm1.FormKeyPress (Expeditor: TObject; var Cheie: Char); începe dacă Cheie în ['0' ... '9'] apoi Cheie: = # 0 Sfârșit;
Dacă una dintre componentele Edit are concentra, si KeyPreview proprietatea unui formular este False, acest cod nu se va executa. Cu alte cuvinte, dacă utilizatorul apasă tasta 5 cheia, tasta 5 caracterul va apărea în componenta Editare focalizată.
Cu toate acestea, în cazul în care KeyPreview este setat pe True, apoi formularul onkeypress evenimentul este executat înainte ca componenta Edit să vadă tasta apăsată. Din nou, dacă utilizatorul a apăsat butonul 5 , apoi atribuie valoarea caracterului zero lui Tastă pentru a preveni introducerea numerică în componenta Editare.