Delphi - Billentyűzet sebességének lekérdezése, beállítása

forráskód letöltése
A Vezérlőpult Billentyűzet programjának segítségével beállíthatjuk a billentyűzet sebességének paramétereit. Ez két dolgot jelent: az első érték azt mondja meg, hogy ha lenyomtunk egy billentyűt, és lenyomva tartjuk azt, akkor azután mennyi idővel kell elkezdenie az ismétlését. A második érték az ismétlések között eltelt időt határozza meg. Ezt a két paramétert akár mi is módosíthatjuk programból. Ennek mikéntjéről szól ez a cikk. A mellékelt példaprogram megnyitása előtt a KeyboardSpeed.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A könnyebb felhasználhatóság érdekében a funkcióhoz egy komponenst készítünk. A komponensnek két property-je van. Az egyik a RepeatDelay, ami az ismétlések előtti várakozási időt határozza meg, értéke 0-3 lehet. A másik property a RepeatSpeed, ami az ismétlések közötti várakozási idő beállítására szolgál, értéke 0-31 lehet.
A komponens konstruktorában meghívjuk a Refresh eljárást, amiben az aktuális értékeket kérdezzük le:
  SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, @rd, 0);
  SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, @rs, 0);
Mint látható, a lekérdezést a SystemParametersInfo függvénnyel végezzük el. Ennek első paramétereként megadjuk azt a konstanst, ami a lekérdezendő értéket azonosítja. A második paraméter 0, mivel itt most ezt nem használjuk. A harmadik paraméter egy integer típusú változó címe, amiben az eredményt megkapjuk. A negyedik paraméter megint csak 0, mivel most ezt sem használjuk.
Amikor valamelyik property-nek értéket adunk, azt rögtön közöljük is az operációs rendszerrel. Ehhez szintén a SystemParametersInfo függvényt használjuk:
  SystemParametersInfo(
    SPI_SETKEYBOARDDELAY,
    FRepeatDelay,
    nil,
    SPIF_SENDCHANGE + SPIF_UPDATEINIFILE);
Az első paraméter most is egy konstans, ami a módosítandó értéket azonosítja. A második paraméterben adjuk meg az új értéket, a harmadik paraméterben pedig nil-t, mivel azt nem használjuk. A negyedik paraméterben két konstanst használhatunk. A SPIF_SENDCHANGE használatával értesítjük az összes futó alkalmazást a változásról, míg SPIF_UPDATEINIFILE konstanssal azt mondjuk meg, hogy az új értéket mentse is el a rendszer.

A RepeatDelay értéket 0 és 3 közötti egész számmal adhatjuk meg. A 0 érték 0,25 másodpercet, míg a 3 pontosan 1 másodpercet jelent. A RepeatSpeed értéke 0 és 31 közötti egész szám, ahol a 0 kb. 2,5 ismétlést, a 31 pedig kb. 30 ismétlést jelent másodpercenként.