Åùå îäíèì âàæíûì ñðåäñòâîì, ñ ïîìîùüþ êîòîðîãî ïîëüçîâàòåëü ìîæåò óïðàâëÿòü ðàáîòîé ïðèëîæåíèÿ, ÿâëÿåòñÿ êëàâèàòóðà. Ïðè âñåé êàæóùåéñÿ ñëîæíîñòè ýòîãî òåõíè÷åñêîãî óñòðîéñòâà ñóùåñòâóþò âñåãî òðè ñîáûòèÿ, ñâÿçàííûõ ñ êëàâèàòóðîé:
- OnKeyDown – íàæàòèå ëþáîé êëàâèøè;
- OnKeyPress – íàæàòèå êëàâèø ASCII-ñèìâîëîâ;
- OnKeyUp – îòïóñêàíèå ëþáîé êëàâèøè.
Òîëüêî àêòèâíûé êîìïîíåíò, êîòîðûé èìååò ôîêóñ ââîäà, ìîæåò îáðàáàòûâàòü ñîáûòèÿ êëàâèàòóðû (èç ýòîãî ñëåäóåò, ÷òî ýòî ìîãóò áûòü òîëüêî ïîòîìêè êëàññà TWinControl). Åñëè àêòèâíûõ ýëåìåíòîâ íåò, òî ñîáûòèÿ îò êëàâèàòóðû áóäåò ïîëó÷àòü ôîðìà. Êðîìå òîãî, ìîæíî íàñòðîèòü ðàáîòó ïðèëîæåíèÿ òàê, ÷òîáû ñîáûòèÿ êëàâèàòóðû âñåãäà ïåðåõâàòûâàëà ôîðìà, à íå àêòèâíûé ýëåìåíò óïðàâëåíèÿ. Äëÿ ýòîãî äîñòàòî÷íî óñòàíîâèòü ñâîéñòâî KeyPreview ôîðìû â true.
Ïðè âîçíèêíîâåíèè ñîáûòèé îò êëàâèàòóðû äëÿ àêòèâíîãî êîìïîíåíòà âûçûâàþòñÿ ñîîòâåòñòâóþùèå ïðîöåäóðû èõ îáðàáîòêè. Ñîáûòèå OnKeyPress îáû÷íî èñïîëüçóåòñÿ â òîì ñëó÷àå, êîãäà íåîáõîäèìà ðåàêöèÿ íà íàæàòèå îäíîé íåôóíêöèîíàëüíîé (ñèìâîëüíîé) êëàâèøè íà êëàâèàòóðå. Íàïðèìåð, îíî íå âîçíèêàåò ïðè íàæàòèè òàêèõ êëàâèø, êàê Shift èëè F4. Ñîáûòèÿ OnKeyDown è OnKeyUp ÷àùå âñåãî èñïîëüçóþòñÿ äëÿ îïðåäåëåíèÿ íàæàòèÿ êîìáèíàöèè êëàâèø, à òàêæå íàæàòèÿ ðàçëè÷íûõ ôóíêöèîíàëüíûõ êëàâèø.
Ðàññìîòðèì îáðàáîòêó ñîáûòèé êëàâèàòóðû íà ïðèìåðå.
Äîïóñòèì, íåîáõîäèìî ñîçäàòü ïðèëîæåíèå ñ ôîðìîé, â çàãîëîâêå êîòîðîé ìîæíî áûëî áû âèäåòü, êàêàÿ ñèìâîëüíàÿ êëàâèøà áûëà íàæàòà, à íà ìåòêå Label, ðàçìåùåííîé íà ôîðìå, îòîáðàæàëñÿ áû êîä îòïóùåííîé êëàâèøè. Âûõîä èç ïðèëîæåíèÿ äîëæåí îñóùåñòâëÿòüñÿ ïî íàæàòèþ êëàâèøè F10. Äëÿ ðåøåíèÿ ïîñòàâëåííîé çàäà÷è, ïðåæäå âñåãî, íóæíî óñòàíîâèòü ñâîéñòâî ôîðìû KeyPreview = true. Òàêèì îáðàçîì, âñå ñîáûòèÿ îò êëàâèàòóðû áó-äåò ïîëó÷àòü ôîðìà. À ÷òîáû ôîðìà îáðàáàòûâàëà ñîáûòèÿ, êàê óêàçàíî âûøå, òðåáóþòñÿ ñëåäóþùèå îáðàáîò÷èêè ñîáûòèé:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Form1.Caption:= 'Íàæàòà êëàâèøà: ' + Key;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_F10 then Form1.Close;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Label1.Caption:= 'Êîä íàæàòîé êëàâèøè: ' + IntToStr(Key);
end;
 ïðåäñòàâëåííûõ îáðàáîò÷èêàõ ñîáûòèé ïàðàìåòð Key ïîçâîëÿåò óçíàòü, êàêàÿ êëàâèøà áûëà íàæàòà, à çíà÷åíèå ïàðàìåòðà Shift äàåò âîçìîæíîñòü îïðåäåëèòü, áûëè ëè íàæàòû êëàâèøè Alt, Ctrl, Shift, à òàêæå êíîïêè ìûøè.
 îáðàáîò÷èêå ñîáûòèÿ OnKeyDown äëÿ ïðîâåðêè íàæàòèÿ êëàâèøè F10 èñïîëüçóåòñÿ ñòàíäàðòíàÿ êîíñòàíòà VK_F10, êîòîðàÿ ñîäåðæèò êîä äàííîé êëàâèøè.  Delphi ñóùåñòâóåò ïîëíûé íàáîð òàêèõ êîíñòàíò äëÿ êàæäîé êëàâèøè. Èõ ïîëíûé ïåðå÷åíü ìîæíî íàéòè â ñïðàâî÷íîé ëèòåðàòóðå.
|