Читайте также:
|
|
Постановка задачи. Проект должен реализовать движение небольшого изображения по фоновой картинке, лежащей на форме (рис. 14).
Рис. 14. Движение пчелы
Реализация. Заготовьте два рисунка с расширением bmp, положите файлы в папку, в которой будет сохранен проект. Положите на форму две кнопки «Старт» и «Выход», а также таймер. При создании формы установите размер формы, равным размеру фонового изображения. С помощью метода Draw скопируйте фоновый рисунок на форму, а рисунок пчелы – левее формы (в начальный момент его не видим).
Код процедуры TForm1.FormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
// создать два объекта - битовых образа
fon:= TBitmap.Create; // фон
fish:= TBitmap.Create; // картинка
// загрузить и вывести фон
fon.LoadFromFile('Роза.bmp');
Form1.Width:= fon.Width+8;
Form1.Height:= fon.Height;
Form1.Left:=0;
Form1.Top:=0;
cw:=Form1.Width;
ch:=Form1.Height;
button1.Left:=cw-60;
button1.Top:=ch-110;
button2.Left:=cw-60;
button2.Top:=ch-80;
// загрузить картинку, которая будет двигаться
fish.LoadFromFile('Пчела.bmp');
W:= fish.Width;
H:= fish.Height;
// определим "прозрачный" цвет
fish.Transparent:= True;
// начальное положение картинки
x:= -5;
y:= ch div 4;
dx:=10;
// определим сохраняемую область фона
Rct:=Bounds(x,y,W,H);
Timer1.Enabled:=false;
end;
В этой процедуре использованы следующие глобальные переменные:
fon, fish: TBitMap; // фон и картинка
x,y,dx: integer; // текущее положение картинки
W, H: integer; // размеры картинки
cw, ch: integer; // размеры формы
Rct: TRect; // положение и размер области фона,
// которая должна быть восстановлена
По кнопке «Старт» запускается таймер, и пчела начинает двигаться направо, а потом налево и т. д.
Имитация движения картинки основана на следующем. Сначала с помощью функции bounds определяем размеры области фона, равной размерам картинки. Затем организуем цикл в обработчике TForm1.Timer1Timer, и в этом цикле реализуем буквально следующее: «стираем пчелу, меняем ее координаты, копируем ее в новом месте». «Стирание» пчелы – это восстановление фона. Все это реализуется с помощью метода Canvas.CopyRect.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Копируем прямоугольник фона
Canvas.CopyRect(Rct, fon.Canvas, Rct);
x:=x+dx; // Горизонтальное движение с отражением
if (x+w> cw)or(x<0) then
dx:=-dx;
// Определим сохраняемую область фона в измененных координатах
Rct:=Bounds(x,y,W,H);
// выведем рисунок
Canvas.Draw(x,y, fish);
end;
Ниже приведен код остальных процедур.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Освободим память, выделенную
// для хранения битовых образов
fon.Free;
br.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0,0,fon);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
Задание. Видоизмените проект так, чтобы движение образа было в разных направлениях.
2.3. Компонент TImage и его использование
Дата добавления: 2015-08-20; просмотров: 55 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
В случайных местах | | | В динамических приложениях |