Razumevanje in obdelava dogodkov s tipkovnice v Delphiju

Dogodki na tipkovnici, skupaj s dogodki z miško, so glavni elementi interakcije uporabnika z vašim programom.

Spodaj so informacije o treh dogodkih, ki omogočajo zajemanje pritiska uporabnika v aplikaciji Delphi: OnKeyDown, OnKeyUp in OnKeyPress.

Dol, gor, pritisnite, dol, gor, pritisnite...

Aplikacije Delphi lahko za sprejem vhoda s tipkovnice uporabljajo dva načina. Če mora uporabnik nekaj vnesti v aplikacijo, je najpreprostejši način, da prejme ta vnos s pomočjo enega od kontrolnikov, ki se samodejno odzove na pritiske tipk, na primer Uredi.

V drugih časih in za bolj splošne namene pa lahko ustvarimo postopke v obliki, ki obravnava tri dogodke, prepoznane v obrazcih in po kateri koli komponenti, ki sprejme vnos s tipkovnice. Za te dogodke lahko napišemo obdelovalce dogodkov, da se odzovejo na katero koli kombinacijo tipk ali tipk, ki jih uporabnik lahko pritisne med izvajanjem.

Tu so tisti dogodki:

OnKeyDown - pokličete, ko pritisnete katero koli tipko na tipkovnici
OnKeyUp - pokliče, ko se sprosti katera tipka na tipkovnici

instagram viewer

OnKeyPress - pokliče se, ko pritisnemo tipko, ki ustreza znaku ASCII

Rokovanje s tipkovnico

Vsi dogodki na tipkovnici imajo enega parameter skupno. The Ključ parameter je tipka na tipkovnici in se uporablja za prenos referenčne vrednosti pritisnjene tipke. The Shift parameter (v OnKeyDown in OnKeyUp postopki) navaja, ali so tipke Shift, Alt ali Ctrl združene s pritiskom tipke.

The Parameter pošiljatelja sklicuje na nadzor, ki je bil uporabljen za klic metode.

postopek TForm1.FormKeyDown (Pošiljatelj: TObject; var Ključ: Beseda; Shift: TShiftState);... postopek TForm1.FormKeyUp (Pošiljatelj: TObject; var Ključ: Beseda; Shift: TShiftState);... postopek TForm1.FormKeyPress (Pošiljatelj: TObject; var Ključ: Char); 

Če uporabnik pritisne tipke za bližnjico ali tipke za pospeševanje, na primer tiste, ki so na voljo v menijskih ukazih, ne zahteva pisanja obdelovalcev dogodkov.

Kaj je fokus?

Fokus je zmožnost sprejemanja uporabniškega vnosa prek miška ali tipkovnico. Dogodek tipkovnice lahko sprejme samo predmet, ki ima fokus. Prav tako je lahko samo ena komponenta na obrazcu aktivna ali v središču pozornosti v delujoči aplikaciji kadar koli.

Nekatere komponente, kot so TImage, TPaintBox, TPanel in TLabel ne more prejeti osredotočenosti. Na splošno so sestavljene iz komponent TGraphicControl ne morejo prejeti osredotočenosti. Poleg tega so komponente, ki so med izvajanjem nevidne (TTimer) ne more prejeti osredotočenosti.

OnKeyDown, OnKeyUp

The OnKeyDown in OnKeyUp dogodki zagotavljajo najnižjo stopnjo odziva tipkovnice. Oboje OnKeyDown in OnKeyUp se lahko upravljavci odzovejo na vse tipkovnice, vključno s funkcijskimi tipkami in tipkami v kombinaciji z Shift, Alt, in Ctrl tipke.

Dogodki na tipkovnici se med seboj ne izključujejo. Ko uporabnik pritisne tipko, oba OnKeyDown in OnKeyPress se ustvarijo dogodki in ko uporabnik sprosti ključ, OnKeyUp dogodek je ustvarjen. Ko uporabnik pritisne eno od tipk, ki OnKeyPress ne zazna, samo OnKeyDown dogodka, ki mu sledi OnKeyUp dogodek.

Če pritisnete tipko, je OnKeyUp dogodek se zgodi po vsem OnKeyDown in OnKeyPress dogodki so se zgodili.

OnKeyPress

OnKeyPress vrne drugačen znak ASCII za 'g' in 'G', vendar OnKeyDown in OnKeyUp ne ločite med velikimi in malimi alfa tipkami.

Ključni in premični parametri

Od takrat Ključ Parameter se posreduje s sklicevanjem, spreminja se lahko upravljavec dogodkov Ključ tako da aplikacija vidi drugačen ključ kot vpleten v dogodek. To je način, kako omejiti vrste znakov, ki jih lahko vnese uporabnik, kot da prepreči uporabnikom tipkanje alfa tipk.

če Ključ v ['a'.. 'z'] + ['A'.. 'Z'] torej Ključ: = # 0 

Zgornja izjava preverja, ali Ključ parameter je v združitvi dveh nizov: malih črk (tj. a skozi z) in velike črke (A-Z). V tem primeru stavek dodeli vrednost znaka nič Ključ da se prepreči kakršen koli vnos v Uredi na primer, ko prejme spremenjeni ključ.

Za ne alfanumerične ključe WinAPI virtualne kode ključev lahko določimo pritisnjeno tipko. Windows določi posebne konstante za vsako tipko, na katero lahko uporabnik pritisne. Na primer VK_RIGHT je navidezna koda tipke za tipko Desna puščica.

Če želite dobiti stanje ključev nekaterih posebnih tipk, kot je TAB ali Stran gor, lahko uporabimo GetKeyState Klic programa Windows API. Stanje tipke določa, ali je tipka navzgor, navzdol ali preklopljena (vklopljena ali izklopljena - izmenično ob vsakem pritisku na tipko).

če HiWord (GetKeyState (vk_PageUp)) <> 0 torej
ShowMessage ('PageUp - DOL')
drugače
ShowMessage ('PageUp - UP'); 

V OnKeyDown in OnKeyUp dogodki, Ključ je nedorečena vrednost Word, ki predstavlja navidezni ključ sistema Windows. Da bi dobili vrednost znaka od Ključ, uporabljamo Chr funkcijo. V OnKeyPress dogodek, Ključ je Char vrednost, ki predstavlja znak ASCII.

Oboje OnKeyDown in OnKeyUp dogodki uporabljajo tip Shift TShiftState, nastavite zastavice za določitev stanja tipk Alt, Ctrl in Shift, ko pritisnete tipko.

Ko na primer pritisnete Ctrl + A, se ustvarijo naslednji ključni dogodki:

 KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)

Preusmeritev dogodkov s tipkovnice na obrazec

Če želite ujeti pritiske tipk na ravni obrazca, namesto da bi jih posredovali komponentam obrazca, nastavite obrazce KeyPreview lastnost True (z uporabo Predmetni inšpektor). Komponenta še vedno vidi dogodek, vendar ima obrazec priložnost, da se najprej spoprime - na primer omogoči ali onemogoči pritiskanje nekaterih tipk.

Recimo, da imate več obrazcev za urejanje na obrazcu in Oblika. OnKeyPress postopek izgleda tako:

postopekTForm1.FormKeyPress (Pošiljatelj: TObject; var Ključ: Char); začetiče Ključ v ['0'..'9'] torej Ključ: = # 0. konec; 

Če ima ena od komponent Urejanje Fokus, in KeyPreview lastnost obrazca je napačna, ta koda se ne bo izvedla. Z drugimi besedami, če uporabnik pritisne na 5 ključ, 5 se bo v osredotočeni komponenti urejanja pojavil znak.

Če pa KeyPreview je nastavljeno na True, potem je obrazec OnKeyPress se dogodek izvede, preden komponenta Uredi zagleda pritisnjeno tipko. Še enkrat, če je uporabnik pritisnil 5 tipko, nato tipki dodeli vrednost znaka nič, da prepreči numerični vnos v komponento Urejanje.

instagram story viewer