2 - utemov

advertisement
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Лабораторная работа №2
События клавиатуры
Обработку клавиатуры можно выполнить, используя комбинацию трех событий.
Событие OnKeyDown происходит при нажатии любой клавиши, включая
функциональные и специальные:
Procedure TForm1.FormKeyDown(Sender:
TShiftState);
TObject;
var
Key:
Word;
Shift:
Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы
ASCII, включая управляющие клавиши:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
Событие OnKeyUp происходит при отпускании любой клавиши:
procedure
TForm1.FormKeyUp(Sender:
TShiftState);
TObject;
var
Key:
Word;
Shift:
Каждый из обработчиков событий получает, по крайней мере, один параметр
(называемый Key), который представляет нажатую клавишу. В обработчиках событий
OnKeyDown и OnKeyUp параметр Key является беззнаковым значением типа Word,
которое представляет код виртуальной клавиши Windows. В обработчике события
OnKeyPress параметр Key – это значение типа Char, представляющее символ ASCII.
Несмотря на то, что обе переменные называются Key, они представляют различную
информацию. Все ASCII-символы имеют соответствующие коды виртуальных клавиш,
но многие виртуальные клавиши не имеют ASCII-эквивалента, например, клавиша
HOME.
Упражнение 1. Напишите приложение, закрывающееся при одновременном нажатии
клавиш Alt и X.
Решение
Создайте
новое
приложение,
выполнив
последовательность
команд:
File / New Application. Сохраните новое приложение в папке Task1 (сначала создайте
папку). Файл модуля – под именем Unit1, файл проекта – project1.
Измените значение свойства заголовка формы следующим образом: «Для закрытия
приложения нажмите Alt + X».
Приложение должно закрываться, если одновременно нажаты обе клавиши, для
обработки такой ситуации можно воспользоваться событием OnKeyDown. Создайте
обработчик этого события. Воспользуемся значением параметра Shift для определения
нажатия клавиши Alt:
If ssAlt in Shift then Close; {Close – это метод формы, закрывающий ее}
Запустите приложение, нажатие клавиши Alt приведет к закрытию формы.
Определим код клавиши X. Добавьте в обработчик события OnKeyDown оператор:
Caption:=IntToStr(Key);
Здесь IntToStr(x) – это функция, которая преобразует целое число x в значение
строкового типа, Key – код нажатой клавиши.
Запустите приложение. При нажатии клавиши с латинской буквой ‘x’ в заголовке
отобразится число 88.
Итак, для решения задачи напишем следующий код обработчика события OnKeyDown
формы:
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Procedure TMainF.FormKeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
Begin
If (ssAlt in Shift) And (Key=88) Then Close;
End;
Сохраните приложение и запустите его. При одновременном нажатии клавиш Alt и
латинской буквы “x” приложение закрывается.
Эксперимент. Запустите приложение и попробуйте закрыть приложение
одновременным нажатием клавиш Alt и русской буквой “ч”. Объясните, почему
приложение закрылось?
Упражнение 2. Напишите программу, которая определяет нажатую на клавиатуре
клавишу и выводит в заголовок формы информацию об этой клавише.
Например, при нажатии строчной латинской буквы ‘a’, в заголовке должна быть
надпись:
‘Код виртуальной клавиши=65 a – строчная латинская буква ASCII-код=97’
(аналогично для русских букв, цифр, специальных символов (запятая, точка, скобки и т.д);
при нажатии клавиши стрелка вправо:
‘Код виртуальной клавиши = 39’,
(аналогично для всех специальных клавиш (F1, Insert и т.д.)).
Решение
Закройте предыдущий проект, выполнив команду Close all меню File. Создайте новое
приложение, выполнив последовательность команд: File / New Application. Сохраните
новое приложение в папке Task2.
Измените значение свойства заголовка Caption формы следующим образом:
«Информация о клавишах клавиатуры».
При нажатии любой клавиши клавиатуры возникают события OnKeyDown и
OnKeyUp. Для получения информации о коде виртуальной клавиши создадим
обработчик события OnKeyDown:
Procedure TMainF.FormKeyDown(Sender: TObject; var
TShiftState);
Begin
Caption:='код виртуальной клавиши='+IntToStr(Key);
End;
Key:
Word;
Shift:
Сохраните приложение и запустите его. При нажатии любой клавиши в заголовке
формы отображается код этой клавиши.
Для отображения информации о символах воспользуемся обработчиком события
OnKeyPress, параметр Key которого содержит символьное значение, представляющее
символ ASCII. Создайте обработчик события OnKeyPress и введите оператор:
Procedure TMainF.FormKeyPress(Sender: TObject; var Key: Char);
Begin
Caption:=Key;
End;
Сохраните приложение и запустите его. При нажатии на клавишу «F» в заголовке
формы отображается символ F. Это происходит в следствии того, что при нажатии на
клавишу вначале происходит событие OnKeyDown, после обработки которого возникает
событие OnKeyPress, в результате этого код виртуальной клавиши затирается
изображением символа. Измените код следующим образом:
РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В.
Procedure TMainF.FormKeyPress(Sender: TObject; var Key: Char);
Begin
Case Key of
'a'..'z': Caption:=Caption+' '+Key+' – строчная латинская буква';
'A'..'Z': Caption:=Caption+' '+Key+' – заглавная латинская буква';
'0'..'9': Caption:=Caption+' '+Key+' - цифра';
'а'..'я': Caption:=Caption+' '+Key+' – строчная русская буква';
'А'..'Я': caption:=Caption+' '+Key+' – заглавная русская буква';
Else Caption:=Caption+' специальный символ';
End;
Caption:=Caption+' ASCII-код='+IntToStr(Ord(Key));
End;
Сохраните приложение и запустите его. Приложение работает так, как описано в
условии задачи.
Задания для самостоятельного выполнения
1. Напишите программу, которая подсчитывает количество нажатий клавиш управления
курсором. Например, ‘Влево – 1, Вверх – 0, Вправо – 5, Вниз - 37’.
2. Напишите программу, которая при нажатии на клавиши управления курсором
перемещает форму в соответствующем направлении; при нажатии комбинации
клавиши <Shift> и клавиши управления курсором - изменяет размеры формы.
3. Напишите программу отображения графиков функций: y=x2; y=sin(x); y=tg(x).
4. Напишите программу отображения графика функции y=a*sin(bx). При нажатии на
клавиши влево/вправо происходит изменение параметра b, при нажатии на клавиши
вверх/вниз – параметра a. В заголовок формы выведите название графика функции,
например, y=3sin(-2x).
Download