Лабы Delphi / Лабораторная работа 2
.docЛабораторная работа № 2
События клавиатуры
Обработку событий клавиатуры можно выполнить, используя комбинацию трех обработчиков.
Событие OnKeyDown происходит при нажатии любой клавиши, включая функциональные и специальные:
Procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Событие OnKeyUp происходит при отпускании любой клавиши:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы ASCII, включая управляющие клавиши:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
Каждый из обработчиков событий получает параметр Key, который представляет нажатую клавишу. В обработчиках событий OnKeyDown и OnKeyUp параметр Key является беззнаковым значением типа Word, которое представляет код виртуальной клавиши Windows. В обработчике события OnKeyPress параметр Key – это значение типа Char, представляющее символ ASCII. Несмотря на то, что обе переменные называются Key, они представляют различную информацию. Все ASCII-символы имеют соответствующие коды виртуальных клавиш, но многие виртуальные клавиши не имеют ASCII-эквивалента, например, клавиша HOME.
Упражнение 1. Напишите приложение, закрывающееся как Pascal при одновременном нажатии клавиш Alt и X.
Создайте новое приложение, выполнив последовательность команд: File / New Application. Сохраните новое приложение в папке Exercise1, вложенной в папку Lab2. Файл модуля – под именем 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 формы:
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. Напишите программу, которая определяет нажатую на клавиатуре клавишу и выводит в заголовок формы информацию об этой клавише (код виртуальной клавиши, символ, ASCII-код, информацию, о том, является ли символ заглавной или строчной латинской или русской буквой, цифрой или специальным символом).
Например, при нажатии строчной латинской буквы ‘a’, в заголовке должна быть надпись:
‘Код виртуальной клавиши=65 a – строчная латинская буква ASCII-код=97’ (аналогично для русских букв, цифр, специальных символов (запятая, точка, скобки и т.д);
при нажатии клавиши стрелки вправо:
‘Код виртуальной клавиши = 39’,
(аналогично для всех специальных клавиш (F1, Insert и т.д.)).
Решение
Закройте предыдущий проект, выполнив команду Close all меню File. Создайте новое приложение, выполнив последовательность команд: File / New Application. Сохраните новое приложение в папке Exercise2.
Измените значение свойства заголовка Caption формы следующим образом: «Информация о клавишах клавиатуры».
При нажатии любой клавиши клавиатуры возникают события OnKeyDown и OnKeyUp. Для получения информации о коде виртуальной клавиши создадим обработчик события OnKeyDown:
Procedure TMainF.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
Caption:='код виртуальной клавиши='+IntToStr(Key);
End;
Сохраните приложение и запустите его. При нажатии любой клавиши в заголовке формы отображается код этой клавиши.
Для отображения информации о символах воспользуемся обработчиком события OnKeyPress, параметр Key которого содержит символьное значение, представляющее символ ASCII. Создайте обработчик события OnKeyPress и введите оператор:
Procedure TMainF.FormKeyPress(Sender: TObject; var Key: Char);
Begin
Caption:=Key;
End;
Сохраните приложение и запустите его. При нажатии на клавишу «F» в заголовке формы отображается символ F. Это происходит вследствие того, что при нажатии на клавишу вначале происходит событие OnKeyDown, после обработки которого возникает событие OnKeyPress, в результате этого код виртуальной клавиши затирается изображением символа. Измените код следующим образом:
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, Вверх – 0, Вправо – 5, Вниз - 37’.
-
Напишите программу, которая при нажатии на клавиши управления курсором перемещает форму в соответствующем направлении; при нажатии комбинации клавиши Shift и клавиши управления курсором - изменяет размеры формы, при этом в заголовке формы должна отображаться информация о размерах и положении формы.
-
Напишите программу отображения графиков функций: y=x2; y=sin(x); y=tg(x). При нажатии на клавишу «1» изображается график функции y=x2; при нажатии на клавишу «2» изображается график функции y=sin(x); при нажатии на клавишу «3» изображается график функции y=tg(x).
-
Напишите программу отображения графиков функций y=a*sin(bx) и y=a*cos(bx). При нажатии на клавишу «s» изображается график синуса y=sin(x), «с» - косинуса y=cos(x). При нажатии на клавиши влево/вправо происходит изменение параметра b, при нажатии на клавиши вверх/вниз – параметра a. В заголовок формы выведите название графика функции, например, y=3sin(-2x).