-Rabinovici, ai scris ziare pentru anul următor?
-Nu, de ce, dacă există Internet.
- Și vei merge la toaletă cu o tastatură?
De la începutul industriei de calculatoare, tastatura a fost dispozitivul principal de intrare pentru informații și este probabil să își păstreze poziția de mult timp.
Evenimentele cu tastatură, împreună cu evenimentele mouse-ului, sunt elementele principale ale interacțiunii cu programul. Acest articol va discuta trei evenimente care vă permit să capturați intrările de la tastatură în aplicația Delphi: OnKeyDown, OnKeyUp și OnKeyPress.
Pentru a primi informații de la tastatură, aplicațiile Delphi pot utiliza două metode. Cea mai ușoară cale este să utilizați una dintre componentele care răspund automat la apăsările de taste, cum ar fi Editare. Cea de-a doua modalitate este de a crea proceduri în forma care va gestiona apăsările de taste și versiunile. Acești agenți de manipulare pot gestiona ambele apăsări de taste și combinații. Deci, acestea sunt evenimentele:
OnKeyDown - se numește când se apasă o tastă pe tastatură. OnKeyUp - se apelează la eliberarea oricărei taste de pe tastatură. OnKeyPress - se numește când se apasă o tastă care este responsabilă pentru un anumit caracter ASCII.
Acum este momentul să vedem cum arată programul în anteprogramul:
Toate evenimentele au un singur parametru comun, numit de obicei tasta. Acest parametru este utilizat pentru a trimite codul unei taste presate. Parametrul Shift (în procedurile și onkeydown onkeyup), indică faptul că cheia a fost apăsată în combinație cu tasta Shift, Alt și Ctrl.
Focus este capacitatea de a primi intrări personalizate prin intermediul mouse-ului sau al tastaturii. Numai obiectele care se concentrează pot recepționa evenimente de la tastatură. Pe formularul unei aplicații active, o singură componentă poate fi activă la un moment dat (focalizare activă).
Unele componente, cum ar fi TImage, TPaintBox, TPanel TLabel și nu poate primi focalizarea, cu alte cuvinte, componentele moștenite de la TGraphicControl. De asemenea, componentele invizibile, cum ar fi TTimer, nu pot primi focalizare.
Evenimentele OnKeyDown și OnKeyUp oferă cel mai scăzut nivel de răspuns al tastaturii. Manipulatorii onkeydown onkeyup și pot răspunde la toate cheile de la tastatură, inclusiv taste funcționale și combinația cu Shift, Alt și Ctrl.
Evenimentele cu tastatură nu se exclud reciproc. Atunci când utilizatorul apasă o tastă, cele două evenimente sunt generate onkeydown și onkeypress, și atunci când drumul, acesta este doar unul singur: onkeyup. Dacă utilizatorul apasă unul dintre butoanele, care nu onkeypress să fie în măsură să determine ce va fi generat de un singur eveniment onkeydown, și eliberarea onkeyup.
OnKeyPress returnează valori ASCII diferite pentru 'g' și 'G'. Cu toate acestea, OnKeyDown și OnKeyUp nu disting între majuscule și majuscule.
Opțiunile cheie și Shift
Parametrul cheie poate fi modificat astfel încât aplicația să primească un alt cod cheie. În acest fel, puteți restricționa setul de caractere diferite pe care utilizatorul îl poate introduce de la tastatură. De exemplu, puteți introduce numai numere. Pentru a face acest lucru, adăugați următorul cod la handlerul de evenimente OnKeyPress și setați KeyPreview la True (vezi mai jos).
Această expresie testează dacă cheia conține caractere minuscule ("a" .. "z") și majuscule ("A" .. "Z"). În acest caz, parametrul este setat la zero pentru a împiedica intrarea în componenta Editare (de exemplu).
În Windows sunt definite constante speciale pentru fiecare cheie. De exemplu, VK_RIGHT corespunde codului cheie pentru săgeata dreapta.
Pentru a obține statutul de taste speciale, cum ar fi TAB sau PageUp, puteți utiliza funcția API GetKeyState. Tastele de stare pot fi în trei stări: eliberate, presate și activate. Dacă bitul cel mai semnificativ este 1, atunci tasta este apăsată, altfel este eliberată. Pentru a testa acest bit, puteți utiliza funcția HiWord API. Dacă bitul low-order este 1, atunci cheia este pornită. Iată un exemplu de obținere a unei chei speciale:
În cazul onkeydown și onkeyup, Key este o nesemnate valoare de doi octeți (Word), care este o cheie pentru Windows virtuală. Pentru a obține valoarea unui simbol, puteți utiliza funcția Chr. În cazul OnKeyPress, parametrul Key este valoarea Char reprezentând caracterul ASCII.
Evenimentele OnKeyDown și OnKeyUp au un parametru Shift cu tipul TShiftState. În Delphi, tipul TShiftState este definit ca un set de steaguri care determină starea Alt, Ctrl și Shift când apăsați o tastă.
De exemplu, următorul cod (de la handler onkeyup) se conectează rândul „Ctrl +“ cu butonul apăsat și afișează rezultatul în forma antet:
Dacă apăsați Ctrl + A, vor fi generate următoarele evenimente:
Operatorul de tastatură poate funcționa pe două niveluri: la nivel de componentă și la nivelul formei. KeyPreview forma de proprietate determină dacă evenimentele sub formă de tastatură numite înainte de evenimente-cheie ale componentelor precum și formularul poate primi toate intrarile de la tastatura destinate componentei pentru care focalizarea este.
Pentru a intercepta apăsările de taste la nivelul formei, înainte ca ele să fie transmise componentelor din formular, trebuie să setați proprietatea KeyPreview la True. După aceea, componenta va primi evenimente ca mai înainte, dar mai întâi vor intra în formular pentru a permite programului să permită sau să refuze introducerea de diferite caractere.
Să presupunem că aveți mai multe componente Editare pe formular și procedura Form.OnKeyPress arată astfel:
Dacă o componentă are să se concentreze și Editare KeyPreview proprietate este setată la False, acest cod nu va fi executat - cu alte cuvinte, în cazul în care utilizatorul apasă butonul „5“, apoi pe Editare Componenta cu focalizare, apare „5“.
Cu toate acestea, în cazul în care KeyPreview setat la True, atunci evenimentul va fi realizată sub formă onkeypress înainte de a modifica componenta vede tasta apăsată. Prin urmare, în cazul în care utilizatorul apasă tasta „5“, cheia va fi substituit la zero, prevenind astfel pătrunderea caracterelor numerice în Edit.