РГГУ, ПИ-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).