Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
9
Добавлен:
14.08.2019
Размер:
1.17 Mб
Скачать

3.2. События от клавиатуры

3.2.1. Код клавиши

Постановка задачи. Создайте приложение, выдающее код клавиши. Используйте событие формы OnKeyDown, в обработчике которого выведите десятичный код (переменная key) с помощью Label1.Caption.

Рис. 23. Код клавиш

Реализация. Положите на форму четыре надписи TLabel. Откройте вкладку «События» формы и дважды кликните напротив событий OnKeyDown и OnKeyPress. Напишите следующий код:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

label1.Caption:=Inttostr(key);

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

label2.caption:=key;

end;

Задание. Перенесите в тетрадь в виде таблицы коды основных клавиш и символов.

3.2.2. Управляемое движение образа

по нажатию клавиши со стрелкой

Постановка задачи. В центре формы находится небольшая картинка кого-нибудь, например, гепарда. По нажатию клавиш со стрелками гепард перемещается по форме.

Реализация. Нарисуйте гепарда в графическом редакторе Paint и сохраните его в папке проекта. Загрузите его из файла как растровый рисунок типа TBitMap. Пусть координаты этого образа будут x1, y1. С помощью метода Draw выведем рисунок в центр формы.

cw:=clientwidth;

ch:=clientheight;

x1:=cw div 2;

y1:=ch div 2;

Form1.Canvas.Draw(x1,y1, bit1);

На вкладке Additional найдем компонент TApplicationEvents и положим его на форму в любое место. Он невидимый. Откроем вкладку «Events» (события), найдем событие OnShortCut и справа напротив OnShortCut кликнем дважды мышью. Откроется обработчик TForm1.ApplicationEvents1ShortCut, который возвращает переменную Msg, содержащую код нажатой клавиши. В этой процедуре опишем изменение координат х1, у1 при нажатии клавиш со стрелками. До изменения координат образ «стираем», т. е. закрашиваем цветом формы. Для закрашивания напишите свою процедуру clear(x,y:integer). После изменения координат х1, у1 образ вновь копируем на форму. Напишем код обработчика события OnShortCut:

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);

begin

clear(x1,y1); // Стираем образ

case Msg.CharCode of

37:if x1>dx1 then

x1:=x1-dx1; {влево}

40:if y1+30<ch-dy1 then

y1:=y1+dy1; {вниз}

38:if y1>dy1 then

y1:=y1-dy1; {вверх}

39:if x1+30<cw-dx1 then

x1:=x1+dx1; {вправо}

end;

Form1.Canvas.Draw(x1,y1,bit1); // Выводим образ

end;

В обработчике TForm1.BitBtn1Click события OnClick кнопки BitBtn1 напишем следующий код:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin { Загрузить рисунок }

Bit1.loadfromfile('гепард.bmp');

bit1.Transparent:=true;

Form1.Canvas.Draw(x1,y1,bit1);

end;

3.2.3. Совмещение управляемого и неуправляемого движений.

Проект «Догонялки»

Постановка задачи. Пусть в данном приложении один образ управляется стрелками с клавиатуры, а второй догоняет его, как изображено на рис. 24.

Рис. 24. Проект «Догонялки»

Реализация. Откопируем папку предыдущего проекта с именем «Догонялки». Добавим второй рисунок, желательно такого же размера, как первый. Второй рисунок загрузим в переменную bit2. Пусть координаты второго образа будут х2, у2. Положим на форму таймер. Код события OnTimer компонента Timer1 приведен в обработчике Timer1Timer(Sender: TObject).

procedure TForm1.Timer1Timer(Sender: TObject);

begin {Здесь реализовано движение за первым образом}

clear(x2,y2);

if (x2>x1) then

begin

if(x2>dx2) then

x2:=x2-dx2;

end

else

if x2+30<cw-dx2 then

x2:=x2+dx2;

if y2>y1 then

begin

if(y2>dy1) then

y2:=y2-dy2;

end

else

if y2+30<ch-dy2 then

y2:=y2+dy2;

Form1.Canvas.Draw(x2,y2,bit2);

end;

Задание. Самостоятельно придумайте простенькую игру и реализуйте ее. Используйте клавиши со стрелками.