Události na klávesnici spolu s události myši, jsou primární prvky interakce uživatele s programem.
Níže jsou uvedeny informace o třech událostech, které umožňují zachytit stisknutí kláves uživatele v aplikaci Delphi: OnKeyDown, OnKeyUp a OnKeyPress.
Dolů, nahoru, stiskněte, dolů, nahoru, stiskněte...
Aplikace Delphi mohou použít dvě metody pro příjem vstupu z klávesnice. Pokud uživatel musí do aplikace něco napsat, nejjednodušší způsob, jak získat tento vstup, je použít jeden z ovládacích prvků, který automaticky reaguje na stisknutí kláves, například Upravit.
Jindy a pro obecnější účely však můžeme vytvořit procedury ve formě, která zpracovává tři události rozpoznané formuláři a jakoukoli komponentou, která přijímá vstup z klávesnice. Můžeme psát obsluhy událostí pro tyto události, abychom reagovali na jakoukoli klávesu nebo kombinaci kláves, kterou uživatel může za běhu stisknout.
Zde jsou tyto události:
OnKeyDown - vyvolává se, když je stisknuta libovolná klávesa na klávesnici
OnKeyUp - volaná, když je uvolněna jakákoli klávesa na klávesnici
OnKeyPress - vyvoláno, když je stisknuto tlačítko odpovídající znaku ASCII
Klávesové ovladače
Všechny události na klávesnici mají jednu parametr společné. Klíč parametr je klávesa na klávesnici a používá se k předávání podle hodnoty stisknuté klávesy. Posun parametr (v OnKeyDown a OnKeyUp procedury) označuje, zda jsou klávesy Shift, Alt nebo Ctrl kombinovány se stiskem klávesy.
Parametr odesílatele odkazuje na ovládací prvek, který byl použit k vyvolání metody.
postup TForm1.FormKeyDown (odesílatel: TObject; var Key: Word; Shift: TShiftState);... postup TForm1.FormKeyUp (odesílatel: TObject; var Key: Word; Shift: TShiftState);... postup TForm1.FormKeyPress (Odesílatel: TObject; var Klíč: Char);
Reakce, když uživatel stiskne klávesové zkratky nebo akcelerátory, jako jsou klávesy dodávané s příkazy nabídky, nevyžaduje psaní obsluhy událostí.
Co je to Focus?
Zaměření je schopnost přijímat vstup uživatele prostřednictvím internetu myš nebo klávesnice. Událost klávesnice může přijmout pouze objekt, který má fokus. V spuštěné aplikaci může být v kterémkoli daném okamžiku aktivní nebo může být aktivní pouze jedna součást na formulář.
Některé komponenty, například TImage, TPaintBox, TPanel a TLabel nelze zaostřit. Obecně složky odvozené z TGraphicControl nelze zaostřit. Navíc komponenty, které jsou za běhu neviditelné (TTimer) nelze zaostřit.
OnKeyDown, OnKeyUp
OnKeyDown a OnKeyUp události poskytují nejnižší úroveň odezvy klávesnice. Oba OnKeyDown a OnKeyUp obsluhující pracovníci mohou reagovat na všechny klávesy klávesnice, včetně funkčních kláves a kláves kombinovaných s klávesnicí Posun, Alt, a Ctrl klíče.
Události klávesnice se vzájemně nevylučují. Když uživatel stiskne klávesu, obě OnKeyDown a OnKeyPress události jsou generovány, a když uživatel uvolní klíč, OnKeyUp událost je generována. Když uživatel stiskne jednu z kláves, která OnKeyPress nedetekuje, pouze OnKeyDown dojde k události, následované OnKeyUp událost.
Pokud podržíte stisknutou klávesu, OnKeyUp událost nastane po všech událostech OnKeyDown a OnKeyPress došlo k událostem.
OnKeyPress
OnKeyPress vrací jiný znak ASCII pro znaky „g“ a „G“, ale OnKeyDown a OnKeyUp nerozlišujte mezi velkými a malými alfa klávesami.
Parametry klíče a posunu
Od roku Klíč parametr je předán odkazem, obsluha události se může změnit Klíč takže aplikace vidí jiný klíč jako součást události. Toto je způsob, jak omezit druhy znaků, které může uživatel zadat, jako například zabránit uživatelům v psaní alfa klíčů.
-li Klíč v ['a'.. 'z'] + ['A'.. 'Z'] pak Klíč: = # 0
Výše uvedené prohlášení kontroluje, zda Klíč parametr je ve spojení dvou sad: malých písmen (tj. A přes z) a velká písmena (A-Z). Pokud ano, příkaz přiřadí znakové hodnotě nula Klíč aby se zabránilo jakémukoli vstupu do Upravit například když obdrží modifikovaný klíč.
Pro nealfanumerické klíče WinAPI virtuální kódy klíčů lze použít k určení stisknutí tlačítka. Windows definuje speciální konstanty pro každou klávesu, kterou může uživatel stisknout. Například, VK_RIGHT je kód virtuální klávesy pro klávesu se šipkou vpravo.
Chcete-li získat klíčový stav některých speciálních kláves jako TAB nebo PageUp, můžeme použít GetKeyState Volání rozhraní Windows API. Stav klíče určuje, zda je tlačítko nahoru, dolů nebo přepnuto (zapnuto nebo vypnuto - střídání při každém stisknutí tlačítka).
-li HiWord (GetKeyState (vk_PageUp)) <> 0 pak
ShowMessage ('PageUp - DOWN')
jiný
ShowMessage ('PageUp - UP');
V OnKeyDown a OnKeyUp Události, Klíč je nepodepsaná hodnota aplikace Word, která představuje virtuální klíč Windows. Aby bylo možné získat hodnotu znaku od Klíč, používáme Chr funkce. V OnKeyPress událost, Klíč je Char hodnota, která představuje znak ASCII.
Oba OnKeyDown a OnKeyUp události používají parametr Shift typu TShiftState, nastaví příznaky pro určení stavu kláves Alt, Ctrl a Shift při stisknutí klávesy.
Například když stisknete Ctrl + A, vygenerují se následující klíčové události:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
Přesměrování událostí klávesnice do formuláře
Chcete-li zachytit stisky kláves na úrovni formuláře namísto jejich předání do komponent formuláře, nastavte je KeyPreview vlastnost true (pomocí Inspektor objektů). Komponenta událost stále vidí, ale formulář má možnost ji nejprve zpracovat - například povolit nebo zakázat stisknutí některých kláves.
Předpokládejme, že máte několik úprav ve formuláři a Formulář. OnKeyPress postup vypadá takto:
postupTForm1.FormKeyPress (odesílatel: TObject; var Klíč: Char); začít-li Klíč v ['0'..'9'] pak Klíč: = # 0. konec;
Má-li některá ze složek Editovat Soustředit se, a KeyPreview Vlastnost formuláře je False, tento kód se nespustí. Jinými slovy, pokud uživatel stiskne 5 klíč, 5 Znak se objeví v zaostřené komponentě Upravit.
Nicméně, pokud KeyPreview je nastavena na hodnotu True, pak na formuláři OnKeyPress událost je spuštěna předtím, než komponenta Upravit uvidí stisknutou klávesu. Znovu, pokud uživatel stiskl 5 klávesa, pak přiřadí znakové hodnotě nule ke Key, aby se zabránilo numerickému vstupu do komponenty Edit.