Udalosti klávesnice, spolu s udalosti myši, sú primárnymi prvkami interakcie používateľa s vaším programom.
Nižšie sú uvedené informácie o troch udalostiach, ktoré umožňujú zachytiť stlačenia klávesov používateľa v aplikácii Delphi: OnKeyDown, OnKeyUp a OnKeyPress.
Dole, hore, stlačte, dole, hore, stlačte...
Aplikácie Delphi môžu na príjem vstupu z klávesnice použiť dve metódy. Ak používateľ musí do aplikácie niečo napísať, najjednoduchší spôsob, ako získať tento vstup, je použiť jeden z ovládacích prvkov, ktorý automaticky reaguje na stlačenie klávesov, ako napríklad Upraviť.
Inokedy a na všeobecnejšie účely však môžeme vytvoriť procedúry vo forme, ktorá spracováva tri udalosti rozpoznané formulármi a akýmkoľvek komponentom, ktorý akceptuje vstup z klávesnice. Môžeme pre tieto udalosti napísať ovládače udalostí, aby sme odpovedali na ľubovoľnú klávesu alebo kombináciu klávesov, ktorú by používateľ mohol za behu stlačiť.
Tu sú tieto udalosti:
OnKeyDown - zavolá sa po stlačení ľubovoľnej klávesy na klávesnici
OnKeyUp - zavolá sa, keď sa uvoľní ktorýkoľvek kláves na klávesnici
OnKeyPress - zavolá sa po stlačení klávesu, ktoré zodpovedá znaku ASCII
Ovládače klávesnice
Všetky udalosti na klávesnici majú jednu parameter spoločné. kľúč parameter je kláves na klávesnici a používa sa na odovzdanie hodnoty stlačeného klávesu. smena parameter (v OnKeyDown a OnKeyUp procedúry) označuje, či sú klávesy Shift, Alt alebo Ctrl kombinované s klávesovou skratkou.
Parameter odosielateľa odkazuje na ovládací prvok, ktorý sa použil na volanie metódy.
procedúra TForm1.FormKeyDown (odosielateľ: TObject; var Kľúč: slovo; Shift: TShiftState);... procedúra TForm1.FormKeyUp (odosielateľ: TObject; var Kľúč: slovo; Shift: TShiftState);... procedúra TForm1.FormKeyPress (odosielateľ: TObject; var Kľúč: Char);
Reakcia, keď užívateľ stlačí klávesové skratky alebo akcelerátory, ako napríklad klávesy dodávané s príkazmi v ponuke, nevyžaduje písanie obsluhy udalostí.
Čo je to Focus?
Zameranie je schopnosť získať vstup od používateľa prostredníctvom internetu myš alebo klávesnica. Udalosť klávesnice môže prijať iba objekt, ktorý má fokus. V bežnej aplikácii môže byť v ktoromkoľvek danom čase aktívna alebo môže byť zameraná iba jedna zložka na formulár.
Niektoré komponenty, napr TImage, TPaintBox, TPanel a TLabel nemôže byť zameraný. Zložky odvodené od TGraphicControl nie sú schopní zaostriť. Komponenty, ktoré sú v čase spustenia neviditeľné (TTimer) nie je možné zamerať.
OnKeyDown, OnKeyUp
OnKeyDown a OnKeyUp udalosti poskytujú najnižšiu úroveň odozvy klávesnice. oba OnKeyDown a OnKeyUp obslužní pracovníci môžu reagovať na všetky klávesy klávesnice vrátane funkčných klávesov a klávesov kombinovaných s klávesnicou smena, alta ctrl kľúča.
Udalosti klávesnice sa vzájomne nevylučujú. Keď užívateľ stlačí kláves, obidve OnKeyDown a OnKeyPress udalosti sú generované a keď užívateľ uvoľní kľúč, OnKeyUp udalosť je vygenerovaná. Keď užívateľ stlačí jedno z klávesov, ktoré OnKeyPress nezistí, iba OnKeyDown nastane udalosť, za ktorou nasleduje OnKeyUp event.
Ak podržíte stlačený kláves, OnKeyUp udalosť nastane po všetkých udalostiach OnKeyDown a OnKeyPress udalosti sa vyskytli.
OnKeyPress
OnKeyPress vracia iný znak ASCII pre znaky „g“ a „G“, ale OnKeyDown a OnKeyUp nerozlišujte medzi veľkými a malými písmenami alfa.
Parametre kľúča a posunu
Od kľúč Ak je parameter odovzdaný odkazom, obsluha udalosti sa môže zmeniť kľúč takže aplikácia vidí iný kľúč ako zapojený do udalosti. Toto je spôsob, ako obmedziť druhy znakov, ktoré môže užívateľ zadať, ako napríklad zabrániť používateľom v písaní alfa kľúčov.
ak kľúč v ['a'.. 'z'] + ['A'.. 'Z'] potom Kľúč: = # 0
Vyššie uvedené vyhlásenie kontroluje, či kľúč parameter je v spojení dvoch sád: malých písmen (t.j. skrz z) a veľké písmená (A-Z). Ak áno, príkaz priradí znakovej hodnote nulu kľúč aby sa zabránilo akémukoľvek vstupu do internetu editovať napríklad pri prijatí modifikovaného kľúča.
Pre nealfanumerické kľúče WinAPI kódy virtuálnych kľúčov možno použiť na určenie stlačenia klávesu. Windows definuje špeciálne konštanty pre každý kľúč, ktorý môže používateľ stlačiť. Napríklad, VK_RIGHT je kód virtuálneho kľúča pre kláves so šípkou doprava.
Ak chcete získať kľúčový stav niektorých špeciálnych klávesov, ako sú TAB alebo Strana hore, môžeme použiť GetKeyState Volanie rozhrania Windows API. Stav kľúča určuje, či je kláves hore, dole alebo prepnutý (zapnutý alebo vypnutý - striedavo pri každom stlačení klávesu).
ak HiWord (GetKeyState (vk_PageUp)) <> 0 potom
ShowMessage („PageUp - DOWN“)
inak
ShowMessage („PageUp - UP“);
V OnKeyDown a OnKeyUp diania, kľúč je nepodpísaná hodnota programu Word, ktorá predstavuje virtuálny kľúč systému Windows. Aby sa získala hodnota charakteru kľúč, používame Chr Funkcie. V OnKeyPress event, kľúč je a spáliť hodnota, ktorá predstavuje znak ASCII.
oba OnKeyDown a OnKeyUp udalosti používajú parameter Shift typu TShiftState, nastaví príznaky na určenie stavu klávesov Alt, Ctrl a Shift po stlačení klávesu.
Napríklad, keď stlačíte Ctrl + A, vygenerujú sa nasledujúce kľúčové udalosti:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Presmerovanie udalostí klávesnice do formulára
Ak chcete zachytiť stlačenia klávesov na úrovni formulára namiesto ich odovzdávania do komponentov formulára, nastavte ich prednosť klávesových Vlastnosť True (pomocou Inšpektor objektov). Komponent stále vidí udalosť, ale formulár má možnosť ju najprv spracovať - napríklad povoliť alebo zakázať niektoré klávesy.
Predpokladajme, že vo formulári máte niekoľko úprav a Formulár. OnKeyPress postup vyzerá takto:
procedúraTForm1.FormKeyPress (odosielateľ: TObject; var Kľúč: Char); začaťak kľúč v ['0'..'9'] potom Kľúč: = # 0. koniec;
Ak jeden z komponentov Edit má focus, a prednosť klávesových Vlastnosť formulára je False, tento kód sa nevykoná. Inými slovami, ak používateľ stlačí 5 kľúč, 5 znak sa objaví v zaostrenom komponente Edit.
Ak je však prednosť klávesových je nastavená na hodnotu True, potom na formulári OnKeyPress udalosť je vykonaná predtým, ako komponent Edit uvidí stlačený kláves. Opäť platí, že ak používateľ stlačil 5 klávesa, potom priradí znakovej hodnote nulu kľúču, aby sa zabránilo numerickému vstupu do komponentu Úpravy.