- •Оглавление
- •Введение
- •Глава 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
1.1.3. Проект «Светофор»
П остановка задачи. Три шарика, перекрашиваясь поочередно, имити-руют работу светофора.
Реализация. Положите на форму компонент TPanel. Он является несущей конструкцией для компонентов, лежащих на нем. Расположите на нем три компонента типа TShape. Задайте для них свойство StCircle, чтобы они имели форму круга. Свойство Brush.Color компонента TShape используется для задания цвета круга. Расположите два компонента TButton – кнопки «Пуск» и «Стоп». Также положите компонент TTimer. Форма этого проекта приведена на рис. 6.
Рис. 6. Форма проекта «Светофор»
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
down:boolean;
i:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
down:=true;
i:=1;
timer1.enabled:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=false;
close;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i=2 then
begin
shape2.Brush.Color:=clyellow;
if down then
begin
shape1.Brush.Color:=clgray;
i:=3;
end
else
begin
shape3.Brush.Color:=clgray;
i:=1;
end;
end
else
begin
if i=1 then
begin
shape1.Brush.Color:=clred;
shape2.Brush.Color:=clgray;
i:=2;
down:=true;
end
else
begin
shape3.Brush.Color:=clgreen;
shape2.Brush.Color:=clgray;
i:=2;
down:=false;
end;
end;
end;
end.
Задание. Положите на форму регулятор TTrackBar для увеличения или уменьшения времени свечения светофора.
В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор
if (TrackBar1.Position=0) then
ShowMessage(‘Задайте интервал’);
В процедуру TForm1.Button1Click(Sender: TObject) добавьте оператор
Timer1.Interval:=TrackBar1.Position*100;
Множитель 100 не обязателен.
1.1.4. Проект «Движение шарика tShape с отражением»
Постановка задачи. Проект должен реализовать движение компонента TShape в виде раскрашенного шарика с отражением от краев формы. Шаги перемещения задавайте случайным образом.
Реализация. Положите на форму панель, на нее три кнопки TBitBtn со страницы Additional: Start, Retry, Close. На эти кнопки можно поместить готовые надписи с соответствующими рисунками.
Положите на форму TShape в виде не очень большого кружка и TTimer со страницы System. Вид формы приведен на рис. 7.
Рис. 7. Форма проекта «Движение шарика с отражением»
В разделе var опишем глобальные переменные:
var cw, ch, dx, dy, r : integer;
Переменные cw, ch хранят ширину и высоту рабочей (клиентской) области формы, т. е. без учета ее границ. Ниже приведен код.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Shape1: TShape;
Timer1: TTimer;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dx,dy,cw,ch,r:integer;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin // Кнопка “Start”
timer1.Enabled:=true;
end;
// Зададим начальные данные
procedure TForm1.FormCreate(Sender: TObject);
begin
cw:=clientwidth;
ch:=clientheight;
randomize;
repeat
dx:=-10+random(21);
dy:=-10+random(21);
until (dx<>0)and(dy<>0);
r:=shape1.Width div 2; // Радиус шарика
shape1.Left:=cw div 2; // Начальное положение в центре
shape1.Top:=ch div 2; // формы
timer1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
shape1.Left:=shape1.Left+dx;
shape1.Top:=shape1.Top+dy;
if (shape1.Left<0)or(shape1.Left+2*r>=cw) then
dx:=-dx;
if (shape1.top<0)or(shape1.top+2*r>=ch-panel1.Height) then
dy:=-dy;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin // Кнопка “Retry”
cw:=clientwidth;
ch:=clientheight;
repeat
dx:=-10+random(21);
dy:=-10+random(21);
until (dx<>0)and(dy<>0);
shape1.Left:=cw div 2;
shape1.Top:=ch div 2;
timer1.Enabled:=true;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Timer1.Enabled:=false;
Close;
end;
end.
Задание. Усовершенствуйте проект так, чтобы цвет шарика задавался случайным образом, радиус тоже менялся случайно в заданном интервале.
Для задания цвета можно использовать функцию RGB:
Shape1.Brush.Color := RGB(random(256), random(256), random(256));