Evenimente de la tastatură, împreună cu evenimente 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.
Jos, Sus, Apasă, Jos, Sus, Apasă...
Aplicațiile Delphi pot utiliza două metode pentru a primi intrarea 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 chei 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 la eliberarea oricărei taste de pe tastatură
onkeypress - apelat la apăsarea unei taste corespunzătoare unui caracter ASCII
Manipulatoare de tastatură
Toate evenimentele de la tastatură au unul parametru in 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 expeditorului face referire la controlul care a fost folosit pentru a numi 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.
Ce este Focus?
Focalizarea este abilitatea de a primi aportul utilizatorului prin intermediul șoarece sau tastatură. 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, OnKeyUp
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
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.
Parametri pentru cheie și schimbare
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 chei non-alfanumerice, WinAPI coduri cheie virtuale poate fi folosit pentru a determina tasta apăsată. 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'Apăsarea tastelor (A) KeyUp (Ctrl + A)
Redirecționarea evenimentelor de pe tastatură către formular
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); începedacă Cheie în ['0'..'9'] apoi Cheie: = # 0. Sfârșit;
Dacă una dintre componentele Edit are Focus, 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.