Događaji na tipkovnici, zajedno s događaji s mišem, osnovni su elementi korisnikove interakcije s vašim programom.
Ispod su informacije o tri događaja koji omogućuju snimanje korisničkih pritiska u Delphi aplikaciji: OnKeyDown, OnKeyUp i OnKeyPress.
Dolje, gore, pritisnite, nadole, gore, pritisnite...
Delphi aplikacije mogu koristiti dvije metode za primanje ulaza s tipkovnice. Ako korisnik mora upisati nešto u aplikaciju, najlakši način da primi taj unos je upotreba jedne od kontrola koja automatski reagira na pritiske tipki, poput Uredi.
No u drugim vremenima i za općenitije svrhe, možemo stvoriti postupke u obliku koji obrađuje tri događaja prepoznata u obrascima i bilo koju komponentu koja prihvaća unos tipkovnice. Možemo napisati obrađivače događaja za ove događaje kako bi odgovorili na bilo koju tipku ili kombinaciju tipki koje bi korisnik mogao pritisnuti tijekom izvođenja.
Evo tih događaja:
OnKeyDown - zove se kad se pritisne bilo koja tipka na tipkovnici
OnKeyUp - poziva se kada se otpusti bilo koja tipka na tipkovnici
OnKeyPress - poziva se kada pritisnete tipku koja odgovara znaku ASCII
Rukovatelji tipkovnica
Svi događaji na tipkovnici imaju jedan parametar zajedničko. Ključ parametar je tipka na tipkovnici i koristi se za prolazak kroz vrijednost pritisnute tipke. smjena parametar (u OnKeyDown i OnKeyUp procedura) pokazuje jesu li tipke Shift, Alt ili Ctrl kombinirane s pritiskom tipke.
Parametar pošiljatelja odnosi se na kontrolu koja je korištena za pozivanje metode.
postupak TForm1.FormKeyDown (Pošiljatelj: TObject; var Ključ: Riječ; Shift: TShiftState);... postupak TForm1.FormKeyUp (Pošiljatelj: TObject; var Ključ: Riječ; Shift: TShiftState);... postupak TForm1.FormKeyPress (Pošiljatelj: TObject; var Ključ: Char);
Za odgovaranje kad korisnik pritisne tipke prečaca ili akceleratora, poput onih dobivenih naredbama izbornika, ne zahtijeva pisanje alata za obradu događaja.
Što je fokus?
Fokus je sposobnost primanja korisničkog unosa putem miš ili tipkovnicu. Samo objekt koji ima fokus može primiti događaj na tipkovnici. Također, samo jedna komponenta po obrascu može biti aktivna ili se fokusirati u pokrenutoj aplikaciji u bilo kojem trenutku.
Neke komponente, kao što su TImage, TPaintBox, TPanel i TLabel ne može primiti fokus. Općenito, od komponenata koje potječu od TGraphicControl ne mogu primiti fokus. Uz to, komponente koje su nevidljive u vrijeme izvođenja (TTimer) ne može primiti fokus.
OnKeyDown, OnKeyUp
OnKeyDown i OnKeyUp događaji pružaju najnižu razinu odgovora tipkovnice. Oba OnKeyDown i OnKeyUp alati za rukovanje mogu odgovoriti na sve tipkovnice na tipkovnici, uključujući funkcijske tipke i tipke u kombinaciji s smjena, Alt, i ctrl tipke.
Događaji na tipkovnici se međusobno ne isključuju. Kada korisnik pritisne tipku, oba OnKeyDown i OnKeyPress događaji se generiraju i kada korisnik izda ključ, OnKeyUp događaj se generira. Kada korisnik pritisne jednu od tipki koje OnKeyPress ne otkriva, već samo OnKeyDown događaj događa, nakon čega slijedi OnKeyUp događaj.
Ako držite tipku, the OnKeyUp događaj događa nakon svega OnKeyDown i OnKeyPress događaji su se dogodili.
OnKeyPress
OnKeyPress vraća drugačiji ASCII znak za 'g' i 'G', ali OnKeyDown i OnKeyUp nemojte razlikovati velika i mala slova alfa tipki.
Parametri ključa i pomaka
Od vremena Ključ parametar se daje referencom, a obrađivač događaja se može promijeniti Ključ tako da aplikacija vidi drugačiji ključ kao uključen u događaj. Na ovaj je način ograničenje vrsta znakova koje korisnik može unijeti, poput sprečavanja korisnika da upisuju alfa tipke.
ako Ključ u ['a'.. 'z'] + ['A'.. 'Z'] zatim Ključ: = # 0
Gornja izjava provjerava je li Ključ parametar je u savezu dva skupa: mala slova (tj. kroz z) i velika slova (A-Z). Ako je tako, izjava dodjeljuje vrijednost znaka nula Ključ kako bi se spriječio bilo kakav ulaz u ulaz Uredi komponenta, na primjer, kada primi modificirani ključ.
Za ne alfanumeričke tipke, WinAPI virtualni kodovi ključeva može se odrediti pritisnutom tipkom. Windows definira posebne konstante za svaku tipku koju korisnik može pritisnuti. Na primjer, VK_RIGHT je kod virtualne tipke za tipku sa strelicom desno.
Da biste dobili ključno stanje nekih posebnih tipki poput TAB ili PageUp, možemo koristiti GetKeyState Windows API poziv. Status tipke određuje je li tipka gore, dolje ili preklopljena (uključena ili isključena - naizmjenično svaki put kada se tipka pritisne).
ako HiWord (GetKeyState (vk_PageUp)) <> 0 zatim
ShowMessage ('StranicaUp - DOLJE')
drugo
ShowMessage ('PageUp - UP');
U OnKeyDown i OnKeyUp događaji, Ključ je nepotpisana vrijednost Worda koja predstavlja Windows virtualni ključ. Da biste dobili vrijednost znaka od Ključ, koristimo Chr funkcija. U OnKeyPress događaj, Ključ je čađ vrijednost koja predstavlja ASCII znak.
Oba OnKeyDown i OnKeyUp događaji koriste Shift parametar, tipa TShiftState, postavite zastave za određivanje stanja tipki Alt, Ctrl i Shift kada pritisnete tipku.
Na primjer, kada pritisnete Ctrl + A, generiraju se sljedeći ključni događaji:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Preusmjeravanje događaja s tipkovnice na obrazac
Za hvatanje pritiska tipki na razini obrasca, umjesto da ih prosljeđujete komponentama obrasca, postavite obrasce KeyPreview svojstvo True (pomoću Inspektor objekta). Komponenta još uvijek vidi događaj, ali obrazac ima priliku prvo da se nosi s njim - na primjer, dopuštati ili onemogućavati pritiskanje nekih tipki.
Pretpostavimo da na obrascu i na. Imate nekoliko dijelova za uređivanje Oblik. OnKeyPress postupak izgleda kao:
postupakTForm1.FormKeyPress (Pošiljatelj: TObject; var Ključ: Char); početiako Ključ u ['0'..'9'] zatim Ključ: = # 0. kraj;
Ako jedna od komponenti za uređivanje ima Usredotočenost, i the KeyPreview svojstvo obrasca je lažno, ovaj se kôd neće izvršiti. Drugim riječima, ako korisnik pritisne 5 ključ, the 5 u fokusiranoj komponenti Uređivanje pojavit će se znak.
Međutim, ako KeyPreview je postavljeno na True, tada je obrazac OnKeyPress događaj se izvršava prije nego što komponenta Uredi vidi tipku koja je pritisnuta. Opet, ako je korisnik pritisnuo 5 Key, tada tipci dodjeljuje vrijednost znaka nula da spriječi numerički unos u komponentu Edit.