Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Технологии разработки ПО 2005.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
833.54 Кб
Скачать

Распознавание нажатых клавиш

Консольные приложения

Если в программе существует необходимость осуществлять какие-то действия, ориентируясь по нажатым пользователем клавишам, то имеет смысл использовать функции getch() или getche(), которые возвращают код нажатой клавиши, не требуя нажатия Enter. Отличаются они друг от друга тем, что первая не отображает символ клавиши, а вторая – отображает. Эти функции распознают символьные клавиши и клавиши Esc, Tab, Space, BackSpace. Они не предназначены для распознавания управляющих (функциональных) клавиш, таких как F1…F12, Del, Shift и т.п. Рассмотрим примеры.

Пример 1:

int main() {

char sim;

cout << "Nagmite 'y' ili 'n': ";

sim = getch(); // не требует нажатия Enter

if(sim == 'y') cout << "\nNagata klavisha 'y'";

if(sim == 'n') cout << "\nNagata klavisha 'n'";

getch(); return 0;

}

Пример 2:

#include <iostream>

#include <conio>

using namespace std;

//---------------------------------------------------------------------------

int main() {

char kl;

cout << "Nagmite lubuyu klavishu: ";

kl = getch();

int kod = int(kl);

if(kod == 27) cout << "\nNagata klavisha Esc";

else cout << "\nKod nagatoy klavishy = " << kod;

getch(); return 0;

}

Визуальные приложения

Для распознавания нажатых клавиш в визуальных приложениях можно пользоваться такими обработчиками событий, как KeyDown, KeyPress, KeyUp.

Пример 1:

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) {

int kod = int(Key);

if(kod == 114)

Application->MessageBoxA("Нажата клавиша F3", "Распознавание клавиш",

MB_ICONWARNING);

else {

AnsiString data = "Код нажатой клавиши: " + IntToStr(kod);

Application->MessageBoxA(data.c_str(), "Код клавиши", MB_ICONWARNING);

}

}

Пример 2:

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) {

if((Key == 'q') && Shift.Contains(ssAlt)) Form1->Close(); //если нажата Alt+Q – закрыть программу

}