Näppäimistötapahtumien ymmärtäminen ja käsittely Delphissä

Näppäimistötapahtumat yhdessä hiiretapahtumat, ovat ensisijaisia ​​elementtejä käyttäjän vuorovaikutuksessa ohjelman kanssa.

Alla on tietoja kolmesta tapahtumasta, joiden avulla voit kaapata käyttäjän näppäinpainalluksia Delphi-sovelluksessa: OnKeyDown, OnKeyUp ja OnKeyPress.

Alas, ylös, paina, alas, ylös, paina...

Delphi-sovellukset voivat käyttää kahta tapaa vastaanottaa tietoja näppäimistöltä. Jos käyttäjän on kirjoitettava jotain sovellukseen, helpoin tapa vastaanottaa kyseinen syöte on käyttää jotakin säätimistä, jotka vastaavat automaattisesti näppäinpainalluksiin, kuten Muokkaa.

Muina aikoina ja yleisempiä tarkoituksia varten voimme kuitenkin luoda menettelyjä muodossa, joka käsittelee kolme lomakkeen ja minkä tahansa komponentin, joka hyväksyy näppäimistön syöttämät, tunnistettua tapahtumaa. Voimme kirjoittaa tapahtumien käsittelijöitä näille tapahtumille vastaamaan mihin tahansa näppäimeen tai näppäinyhdistelmään, jota käyttäjä voi painaa suorituksen aikana.

Tässä ovat ne tapahtumat:

instagram viewer

OnKeyDown - soitetaan, kun mitä tahansa näppäimistön näppäintä painetaan
OnKeyUp - soitetaan, kun jokin näppäimistön näppäin vapautetaan
OnKeyPress - kutsutaan, kun ASCII-merkkiä vastaavaa näppäintä painetaan

Näppäimistön käsittelijät

Kaikilla näppäimistötapahtumilla on yksi parametri yhteistä. avain parametri on näppäimistön näppäin, ja sitä käytetään ohitettuna painetun näppäimen arvoon. Siirtää parametri ( OnKeyDown ja OnKeyUp menettelytavat) osoittaa, yhdistetäännäppäimet Shift, Alt tai Ctrl näppäimistön kanssa.

Lähettäjän parametri viittaa ohjaukseen, jota käytettiin menetelmän kutsumiseen.

menettely TForm1.FormKeyDown (Lähettäjä: TObject; var Avain: Sana; Vaihto: TShiftState);... menettely TForm1.FormKeyUp (Lähettäjä: TObject; var Avain: Sana; Vaihto: TShiftState);... menettely TForm1.FormKeyPress (Lähettäjä: TObject; var Avain: Char); 

Vastaaminen, kun käyttäjä painaa pikanäppäimiä, kuten valikkokomennoilla varustettuja, ei vaadi tapahtumakäsittelijöiden kirjoittamista.

Mikä on Focus?

Tarkennus on kyky vastaanottaa käyttäjän syötteitä hiiri tai näppäimistö. Vain kohde, jolla on tarkennus, voi vastaanottaa näppäimistötapahtuman. Lisäksi vain yksi komponentti per muoto voi olla aktiivinen tai olla keskittynyt käynnissä olevaan sovellukseen milloin tahansa.

Jotkut komponentit, kuten TImage, TPaintBox, TPanel ja TLabel ei voi keskittyä. Yleensä komponentit, jotka on johdettu TGraphicControl eivät pysty vastaanottamaan keskittymistä. Lisäksi komponentit, jotka ovat näkymättömiä ajon aikana (TTimer) ei voi vastaanottaa tarkennusta.

OnKeyDown, OnKeyUp

OnKeyDown ja OnKeyUp Tapahtumat tarjoavat alhaisimman näppäimistövasteen. molemmat OnKeyDown ja OnKeyUp käsittelijät voivat vastata kaikkiin näppäimistönäppäimiin, mukaan lukien toimintonäppäimet ja näppäimet yhdessä Siirtää, altja ctrl avaimet.

Näppäimistötapahtumat eivät ole toisiaan poissulkevia. Kun käyttäjä painaa näppäintä, molemmat OnKeyDown ja OnKeyPress Tapahtumat luodaan, ja kun käyttäjä vapauttaa avaimen, OnKeyUp tapahtuma luodaan. Kun käyttäjä painaa yhtä näistä näppäimistä OnKeyPress ei tunnista, vain OnKeyDown tapahtuu, jota seuraa OnKeyUp tapahtuma.

Jos pidät näppäintä painettuna, OnKeyUp tapahtuma tapahtuu loppujen lopuksi OnKeyDown ja OnKeyPress tapahtumia on tapahtunut.

OnKeyPress

OnKeyPress palauttaa erilaisen ASCII-merkin 'g' ja 'G', mutta OnKeyDown ja OnKeyUp Älä tee eroa isojen ja pienten aakkosnäppäinten välillä.

Avain- ja vaihtoparametrit

Koska avain parametri välitetään referenssillä, tapahtumakäsittelijä voi muuttua avain jotta sovellus näkee eri avaimen osallistuvan tapahtumaan. Tämä on tapa rajoittaa merkkityyppejä, joita käyttäjä voi syöttää, esimerkiksi estää käyttäjiä kirjoittamasta aakkosnäppäimiä.

jos avain sisään ['a'.. 'z'] + ['A'.. 'Z'] sitten Avain: = # 0 

Yllä oleva lausunto tarkistaa onko avain parametri on kahden joukon yhdistelmässä: pienet merkit (ts. kautta z) ja isot kirjaimet (A-Z). Jos näin on, lause määrittää merkkiarvon nolla arvoon avain estääksesi sisäänmenon Muokata komponentti, esimerkiksi kun se vastaanottaa muokatun avaimen.

Ei-aakkosnumeerisille avaimille WinAPI virtuaaliset avainkoodit voidaan määrittää painettavan näppäimen avulla. Windows määrittelee erityisvakiot jokaiselle näppäimelle, jota käyttäjä voi painaa. Esimerkiksi, VK_RIGHT on oikean nuolinäppäimen virtuaalinen avainkoodi.

Jotta saadaan avainten tila joillekin erikoisnäppäimille, kuten TAB tai Sivu ylös, voimme käyttää GetKeyState Windows API -soitto. Näppäimen tila määrittelee onko näppäintä ylös, alas vai vaihdetaanko (päälle vai pois - vuorotellen joka kerta kun näppäintä painetaan).

jos HiWord (GetKeyState (vk_PageUp)) <> 0 sitten
ShowMessage ('PageUp - DOWN')
muu
ShowMessage ('PageUp - UP'); 

vuonna OnKeyDown ja OnKeyUp Tapahtumat, avain on allekirjoittamaton Word-arvo, joka edustaa Windows-virtuaaliavainta. Merkkiarvon saamiseksi avain, käytämme Chr toimia. vuonna OnKeyPress tapahtuma, avain on char arvo, joka edustaa ASCII-merkkiä.

molemmat OnKeyDown ja OnKeyUp Tapahtumat käyttävät tyypin Shift-parametria TShiftState, asettaa liput Alt-, Ctrl- ja Shift-näppäinten tilan määrittämiseksi, kun näppäintä painetaan.

Esimerkiksi, kun painat Ctrl + A, seuraavat tärkeät tapahtumat luodaan:

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

Näppäimistötapahtumien ohjaaminen muotoon

Aseta lomakkeen lukitsemiseksi näppäinpainallukset lomaketasolla sen sijaan, että siirrät niitä lomakkeen komponenteille KeyPreview omaisuus True (käyttämällä Kohteiden tarkastaja). Komponentti näkee silti tapahtuman, mutta lomakkeella on mahdollisuus käsitellä sitä ensin - esimerkiksi sallia tai estää joidenkin näppäinten painaminen.

Oletetaan, että lomakkeessa ja Muodostavat. OnKeyPress menettely näyttää seuraavalta:

menettelyTForm1.FormKeyPress (Lähettäjä: TObject; var Avain: Char); alkaajos avain sisään ['0'..'9'] sitten Avain: = # 0. pää; 

Jos jollakin muokkauskomponenteista on Focus, ja KeyPreview lomakkeen ominaisuus on väärä, tätä koodia ei suoriteta. Toisin sanoen, jos käyttäjä painaa 5 avain, 5 merkki näkyy tarkennetussa Muokkaa-komponentissa.

Kuitenkin, jos KeyPreview on asetettu True, sitten lomakkeen OnKeyPress tapahtuma suoritetaan ennen kuin Muokkaa-komponentti näkee painetun näppäimen. Jälleen kerran, jos käyttäjä on painanut 5 -näppäimellä, sitten se määrittää nollamerkkiarvon avaimelle estääksesi numeerisen syötteen Muokkaa-komponenttiin.

instagram story viewer