Klaviaturani boshkarish
Skanirlash kodi, begili tugmachalar, boshkaruv tugmachalari, kengaytirilgan kod, ReadKey, KeyPressed, surish tugmachalari,
Standart klaviaturalarda uch tipdagi tugmachalar mavjud:
belgili (xarflar, sonlar);
boshkaruv (funksional tugmachalar, kursorni surish, kushish, yukotish va bokalar);
surish Ctrl, Alt, NumLock, CapsLock va boshkalar.
Biror -bir tugmacha bosilganda klaviatura mikroprotsessori shaxsiy kompyuterlar standartiga mos kodni tanlaydi va bu kod Turbo Pascal sistemasida skanerlash kodiga aylantiriladi. Skanerlash kodini analiz kilish mumkin va u klaviaturani boshkarish algoritmining asosi xisoblanadi.
Belgili tugmachalar bosilganda bittagina kiymatni kaytaradi va bu kiymat oddiy kod deb aytiladi.
Boshkarish klaishalari bosilganda ikkita kiymatni kaytaradi , ulardan birinchisi 0 (mana shu bokarish klavishvsining xususiyatiga kiradi), ikinchisi esa- tugmacha bosilgandagi kattalik. Maxsus tugmachalarning kaytarish kodlarini kengaytirilgan deb kabul kilinadi. Klaviaturani boshkarish CRT modulining maxsus ReadKey va KeyPressed funksiyalari yordamida bajariladi..
ReadKey funksiyasi belgilarni klaviaturadan ukib, Char tipidagi kiymatlarni kaytaradi.
KeyPressed. funksiyasi biron tugmacha bosilganda True ni, aks xolda False ni kaytaradi.
Belgili va boshkarish klavishlarini skanerlash kodlarini kuyidagi misolda kurib chikamiz.
PROGRAM DemoScanCode;
USES Crt;
CONST
Null = #0;
Esc = #27;
F1 = #59;
F10 = #68;
InsKey = #82;
VAR
ExtendKey: boolean;
Ch: char;
FUNCTION GetKey: char;
{ funksiya klavish bosilishini kutib turadi }
VAR
Ch: char;
BEGIN
ExtendKey:= False;
Ch:= ReadKey;
IF Ch = Null THEN BEGIN
ExtendKey:= True;
Ch:= ReadKey
END;
GetKey:= Ch
END; { GetKey }
BEGIN { DemoScanCode }
ClrScr;
REPEAT
Ch := GetKey;
IF NOT ExtendKey THEN
Writeln('Kodli belgi tugmachasi bosilgan ', byte(Ch))
ELSE
CASE Ch OF
F1..F10 : Writeln(' Funksional klavish bosilgan');
InsKey : Writeln(' bosilgan')
ELSE Writeln('Kengaytirilgan kod #00+', byte(Ch));
END; { case }
UNTIL (Ch <> Esc);
END. { DemoScanCode }
Endi siljish tugmachasini qanday ishlashini kurib chikamiz. Misol tarikasida SIF (NumLock) klavishini kurib chikamiz.
Agar baytlarni 0 dan 7 gacha bitlar yigindisi deb karalsa, NumLock ga $0000:$0417 absalyut adresli baytning 5- biti tugri keladi. NumLock klavishining ishlash dasturi kuyidagicha:
PROGRAM DemoNumLock;
USES Crt;
CONST
Esc = #27;
VAR
Ch : char;
ShiftByte: byte absolute $0000:$0417;
BEGIN
REPEAT
IF KeyPressed THEN
Ch:= ReadKey;
IF ShiftByte AND $20 <> 0 THEN
Write(' NumLock tugmachasi bosilgan');
UNTIL Ch <> Esc;
END. { DemoNumLock }
Do'stlaringiz bilan baham: |