Klaviatuurisündmuste mõistmine ja töötlemine Delphis

click fraud protection

Klaviatuuriüritused koos hiireüritused, on peamised elemendid kasutaja suhtlemisel teie programmiga.

Allpool on teave kolme sündmuse kohta, mis võimaldavad teil Delphi-rakenduses kasutaja klahvivajutusi lüüa: OnKeyDown, OnKeyUp ja OnKeyPress.

Alla, üles, vajutage, alla, üles, vajutage...

Delphi rakendused saavad klaviatuurilt sisendi vastuvõtmiseks kasutada kahte meetodit. Kui kasutaja peab rakendusesse midagi kirjutama, on selle sisendi vastuvõtmiseks lihtsaim viis kasutada mõnda juhtnuppu, mis reageerib automaatselt klahvivajutustele, näiteks Muuda.

Kuid muul ajal ja üldisematel eesmärkidel võime protseduure luua kujul, mis käsitleks kolme sündmust, mis on ära tuntud vormide ja mis tahes komponentide poolt, mis aktsepteerivad klaviatuuri sisestust. Saame nende sündmuste jaoks kirjutada sündmuste töötlejaid, et reageerida mis tahes klahvile või klahvikombinatsioonile, mida kasutaja käivituse ajal võib vajutada.

Siin on need sündmused:

OnKeyDown - kutsutakse klaviatuuri ükskõik millise klahvi vajutamisel

instagram viewer

OnKeyUp - kutsutakse klaviatuuri klahvide vabastamisel
OnKeyPress - kutsutakse ASCII-tähemärgile vastava klahvi vajutamisel

Klaviatuurikäitlejad

Kõigil klaviatuuriüritustel on üks parameeter ühine. Võti parameeter on klaviatuuri klahv ja seda kasutatakse vajutatud klahvi väärtuse võrdlemiseks. Vahetus parameeter (lahtris OnKeyDown ja OnKeyUp protseduurid) näitab, kas klahvid Shift, Alt või Ctrl on ühendatud klahvivajutusega.

Saatja parameeter viitab juhtnupule, mida meetodi kutsumiseks kasutati.

protseduur TForm1.FormKeyDown (saatja: TObject; var Võti: Sõna; Shift: TShiftState);... protseduur TForm1.FormKeyUp (saatja: TObject; var Võti: Sõna; Shift: TShiftState);... protseduur TForm1.FormKeyPress (saatja: TObject; var Võti: Char); 

Kui kasutaja reageerib otsetee- või kiirendusklahvile, näiteks menüükäsklustega, siis pole vaja sündmuste käitlejaid kirjutada.

Mis on fookus?

Fookus on võime saada kasutaja sisendit läbi hiir või klaviatuuri. Ainult objekt, millel on fookus, saab klaviatuurisündmuse. Samuti saab ainult üks komponent vormi kohta igal ajahetkel aktiivses rakenduses aktiivne olla või sellele keskenduda.

Mõned komponendid, näiteks Kujutis, TPaintBox, TPanel ja TLabel ei suuda keskenduda. Üldiselt komponendid, mis on saadud TGraphicControl ei suuda keskenduda. Lisaks komponendid, mis on töö ajal nähtamatud (TTimer) ei saa keskenduda.

OnKeyDown, OnKeyUp

OnKeyDown ja OnKeyUp sündmused pakuvad klaviatuuri reageerimise madalaimat taset. Mõlemad OnKeyDown ja OnKeyUp töötlejad saavad reageerida kõigile klaviatuuriklahvidele, sealhulgas funktsiooniklahvidele ja klahvidele koos Vahetus, Altja Ctrl võtmed.

Klaviatuuriüritused ei ole üksteist välistavad. Kui kasutaja vajutab klahvi, mõlemad klahvid OnKeyDown ja OnKeyPress sündmused genereeritakse ja kui kasutaja võtme vabastab, siis OnKeyUp sündmus genereeritakse. Kui kasutaja vajutab ühte nuppu OnKeyPress ei tuvasta, ainult OnKeyDown toimub sündmus, millele järgneb OnKeyUp sündmus.

Kui hoiate klahvi all, siis OnKeyUp sündmus toimub pärast OnKeyDown ja OnKeyPress sündmused on toimunud.

OnKeyPress

OnKeyPress tagastab erineva ASCII tähemärgi g ja G jaoks, kuid OnKeyDown ja OnKeyUp ärge tehke vahet suurtähtede ja väiketähtede vahel.

Klahvide ja nihke parameetrid

Alates Võti parameeter antakse edasi viitega, sündmuste käitleja saab muuta Võti nii et rakendus näeb sündmuses osalevana erinevat võtit. See on viis, kuidas piirata tähemärkide tüüpe, mida kasutaja saab sisestada, näiteks keelata kasutajatel sisestada tähestikku.

kui Võti sisse ['a'.. 'z'] + ['A'.. 'Z'] siis Võti: = # 0 

Ülaltoodud avaldus kontrollib, kas Võti parameeter on kahe komplekti koosseisus: väiketähed (st. a läbi z) ja suurtähed (A-Z). Kui jah, siis omistatakse avalduses tähemärgiväärtus nullile Võti - sisendi sisenemise vältimiseks Redigeeri näiteks siis, kui ta saab muudetud võtme.

Mittetähtnumbriliste klahvide puhul WinAPI virtuaalsed võtmekoodid saab kasutada vajutatud klahvi määramiseks. Windows määratleb spetsiaalsed konstandid iga klahvi jaoks, mida kasutaja saab vajutada. Näiteks, VK_RIGHT on parema noole klahvi virtuaalne võtmekood.

Mõnede eriklahvide võtme oleku saamiseks nagu TAB või PageUp, saame kasutada GetKeyState Windowsi API-kõne. Klahvi olek määrab, kas klahv on üles, alla või sisse lülitatud (sisse või välja lülitatud - vaheldumisi klahvi iga kord vajutades).

kui HiWord (GetKeyState (vk_PageUp)) <> 0 siis
ShowMessage ('PageUp - DOWN')
muud
ShowMessage ('PageUp - UP'); 

Aastal OnKeyDown ja OnKeyUp sündmused, Võti on allkirjastamata Wordi väärtus, mis tähistab Windowsi virtuaalset võtit. Tähemärgi väärtuse saamiseks Võti, kasutame Chr funktsiooni. Aastal OnKeyPress sündmus, Võti on Char väärtus, mis tähistab ASCII märki.

Mõlemad OnKeyDown ja OnKeyUp sündmused kasutavad tüüpi Shift parameetrit Shift TShiftState, seatud lipud klahvide Alt, Ctrl ja Shift oleku määramiseks klahvi vajutamisel.

Näiteks kui vajutate Ctrl + A, genereeritakse järgmised võtmesündmused:

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

Klaviatuuri sündmuste ümbersuunamine vormi

Vormi tasemel klahvivajutuste lõksustamiseks, selle asemel, et neid vormi komponentidele edastada, määrake vormi KeyPreview vara True (kasutades Objektide inspektor). Komponent näeb sündmust endiselt, kuid vormil on võimalus sellega kõigepealt hakkama saada - näiteks lubada või keelata mõne klahvi vajutamist.

Oletame, et vormil ja vormil on mitu redigeerimise komponenti Vorm. OnKeyPress protseduur näeb välja järgmine:

protseduurTForm1.FormKeyPress (saatja: TObject; var Võti: Char); alustadakui Võti sisse ['0'..'9'] siis Võti: = # 0. lõpp; 

Kui mõnel redigeerimise komponendil on Fookus, ja KeyPreview vormi omadus on vale, seda koodi ei käivitata. Teisisõnu, kui kasutaja vajutab nuppu 5 võti, the 5 märk ilmub fokuseeritud redigeerimise komponendis.

Kui aga KeyPreview on seatud väärtusele True, siis vormi oma OnKeyPress sündmus käivitatakse enne, kui komponent Redigeerimine näeb vajutatud klahvi. Jällegi, kui kasutaja on vajutanud nuppu 5, siis määrab see klahvile tähemärgiväärtuse nulli, et takistada numbrilise sisestuse muutmist komponenti.

instagram story viewer