- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
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;
Задание. Самостоятельно придумайте простенькую игру и реализуйте ее. Используйте клавиши со стрелками.