A billentyűzetesemények megértése és feldolgozása a Delphiben

Billentyűzet események, valamint egér események, a felhasználó és a program közötti interakció elsődleges elemei.

Az alábbiakban három olyan információ található, amely lehetővé teszi a felhasználó billentyűleütéseinek rögzítését egy Delphi alkalmazásban: onkeydown, onkeyup és onkeypress.

Le, fel, nyomja meg, le, fel, nyomja...

A Delphi alkalmazások két módszert használhatnak a bemenet fogadására a billentyűzetről. Ha a felhasználónak valamit be kell írnia egy alkalmazásba, akkor a bemenet legegyszerűbb módja az egyik kezelőszerv, például a Szerkesztés használatával, amely automatikusan reagál a gombnyomásokra.

Más időpontokban és általánosabb célokból azonban olyan eljárásokat is létrehozhatunk, amelyek kezelik a formák és a billentyűzet bevitelét elfogadó bármely komponens által felismert három eseményt. Írhatunk eseménykezelőket ezekre az eseményekre, hogy válaszolhassunk bármilyen gombra vagy billentyűkombinációra, amelyet a felhasználó futás közben megnyomhat.

Itt vannak ezek az események:

instagram viewer

onkeydown - hívva, amikor a billentyűzeten bármelyik gombot megnyomják
onkeyup - akkor hívják, amikor a billentyűzeten bármelyik gombot elengedik
onkeypress - hívva, amikor egy ASCII karakternek megfelelő gombot megnyomnak

Billentyűzet-kezelők

Az összes billentyűzet eseménynek van egy paraméter közös. Az Kulcs paraméter a billentyűzeten lévő kulcs, és arra használják, hogy a megnyomott gomb értékére hivatkozással áthaladjanak. Az Váltás paraméter (a onkeydown és onkeyup eljárások) azt jelzi, hogy a Shift, az Alt vagy a Ctrl billentyűk kombinálódnak-e a billentyűleütéssel.

Az Feladó paraméter hivatkozik a metódus meghívására használt vezérlőre.

eljárás TForm1.FormKeyDown (Feladó: TObject; var Kulcs: Szó; Shift: TShiftState);... eljárás TForm1.FormKeyUp (Feladó: TObject; var Kulcs: Szó; Shift: TShiftState);... eljárás TForm1.FormKeyPress (Feladó: TObject; var Kulcs: Char); 

Ha reagálni akar, amikor a felhasználó megnyomja a gyors- vagy gyorsbillentyűket, például a menüparancsokkal ellátott billentyűket, az eseménykezelők írása nem szükséges.

Mi a fókusz?

A fókusz az a képesség, hogy felhasználói bemeneteket fogadjanak a egér vagy billentyűzet. Csak a fókuszban lévő objektum fogadhat billentyűzet eseményt. Ugyanakkor űrlaponként csak egy összetevő lehet aktív vagy összpontosíthat egy futó alkalmazásban egy adott időpontban.

Néhány összetevő, például TImage, TPaintBox, TPanel és TLabel nem tud fókuszálni. Általában a TGraphicControl nem tudnak összpontosítani. Ezenkívül az alkatrészek, amelyek futás közben láthatatlanok (TTimer) nem tud fókuszálni.

OnKeyDown, OnKeyUp

Az onkeydown és onkeyup események biztosítják a billentyűzet legalacsonyabb szintű válaszát. Mindkét onkeydown és onkeyup a kezelők válaszolhatnak az összes billentyűzetre, ideértve a funkcióbillentyűket és a gombokkal kombinált billentyűket is Váltás, Altés Ctrl kulcsok.

A billentyűzet eseményei nem zárják ki egymást. Amikor a felhasználó megnyom egy gombot, mind a onkeydown és onkeypress eseményeket generálnak, és amikor a felhasználó elengedi a kulcsot, a onkeyup esemény generálódik. Amikor a felhasználó megnyomja az egyik gombot onkeypress nem érzékeli, csak a onkeydown esemény történik, amelyet a onkeyup esemény.

Ha lenyomva tartja a gombot, a onkeyup esemény az összes onkeydown és onkeypress események történtek.

onkeypress

Az OnKeyPress eltérő ASCII karaktert ad vissza a „g” és a „G” számára, de onkeydown és onkeyup ne tegyen különbséget a kis- és nagybetűk között.

Kulcs- és váltóparaméterek

Óta Kulcs paraméter referencia útján adódik át, az eseménykezelő megváltozhat Kulcs úgy, hogy az alkalmazás más kulcsot lát, mint amely részt vesz az eseményben. Ez a módszer korlátozza a karakterek típusát, amelyeket a felhasználó beírhat, például megakadályozhatja, hogy a felhasználók gépeljenek alfa-kulcsokat.

ha Kulcs ban ben ['a'.. 'z'] + ['A'.. 'Z'] azután Kulcs: = # 0 

A fenti nyilatkozat ellenőrzi, hogy a Kulcs paraméter két készlet egységében van: kisbetűs karakterek (azaz egy keresztül Z) és nagybetűk (A-Z). Ha igen, akkor az utasítás null karakterértéket rendel hozzá Kulcs a bemenet megakadályozása érdekében szerkesztése összetevő, például amikor megkapja a módosított kulcsot.

Nem alfanumerikus kulcsok esetén a WinAPI virtuális kulcskódok használható a megnyomott gomb meghatározására. A Windows minden felhasználó számára megnyomható kulcshoz speciális állandókat határoz meg. Például, VK_RIGHT a virtuális kulcs kódja a jobbra mutató nyílhoz.

Ahhoz, hogy megkapja a speciális kulcsok kulcsállapotát, például TAB vagy Oldal fel, használhatjuk a GetKeyState Windows API hívás. A gomb állapota határozza meg, hogy a gomb felfelé, lefelé vagy átkapcsolható-e (be vagy ki - váltakozva a gomb minden egyes megnyomására).

ha HiWord (GetKeyState (vk_PageUp)) <> 0 azután
ShowMessage ('PageUp - LE')
más
ShowMessage ('PageUp - UP'); 

Ban,-ben onkeydown és onkeyup rendezvények, Kulcs egy alá nem írt Word érték, amely egy Windows virtuális kulcsot képvisel. Annak érdekében, hogy megkapjuk a karakter értékét Kulcs, használjuk a Chr funkció. Ban,-ben onkeypress esemény, Kulcs egy Faszén érték, amely egy ASCII karaktert képvisel.

Mindkét onkeydown és onkeyup események a Shift paramétert használják TShiftState, egy zászlókészlet, amely meghatározza az Alt, Ctrl és Shift billentyűk állapotát egy gomb megnyomásakor.

Például, ha megnyomja a Ctrl + A, a következő kulcsesemények generálódnak:

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

A billentyűzet események átirányítása az űrlapra

Ha ki szeretné csapdába venni a billentyűleütéseket az űrlap szintjén, ahelyett, hogy átadná őket az űrlap összetevőinek, állítsa be az űrlapot KeyPreview ingatlan valódi (a Tárgyfelügyelő). A komponens továbbra is látja az eseményt, de az űrlapnak lehetősége van először kezelni - például engedélyezni vagy tiltani bizonyos gombok megnyomását.

Tegyük fel, hogy több űrlapon van szerkesztési összetevő és a Forma. onkeypress az eljárás így néz ki:

eljárásTForm1.FormKeyPress (Feladó: TObject; var Kulcs: Char); kezdődikha Kulcs ban ben ['0'..'9'] azután Kulcs: = # 0. vég; 

Ha az egyik Szerkesztés összetevő rendelkezik a Fókusz, és a KeyPreview egy forma tulajdonsága hamis, ez a kód nem fog végrehajtódni. Más szavakkal, ha a felhasználó megnyomja a 5 kulcs, a 5 karakter jelenik meg a fókuszált Szerkesztés komponensben.

Ha azonban a KeyPreview beállítása True, akkor az űrlap onkeypress Az esemény akkor kerül végrehajtásra, mielőtt a Szerkesztés elem megnézi a megnyomott kulcsot. Ismét, ha a felhasználó megnyomja a 5 gombra, akkor a nulla karakterértéket rendeli hozzá a kulcshoz, hogy megakadályozzák a numerikus bemenetet a Szerkesztés összetevőben.