Задание6_Мультипликация (1076738), страница 2
Текст из файла (страница 2)
Приложение 1.
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Back, bitmap, Buf : TBitMap; // фон, картинка, буфер
BackRct : TRect; // область фона, которая должна быть
// восстановлена из буфера
BufRct: TRect; // область буфера, которая используется для
// восстановления фона
x,y:integer; // текущее положение картинки
W,H: integer; // размеры картинки
procedure TForm1.FormActivate(Sender: TObject);
begin
// создать три объекта - битовых образа
Back := TBitmap.Create; // фон
bitmap := TBitmap.Create; // картинка
Buf := TBitmap.Create; // буфер
// загрузить и вывести фон
Back.LoadFromFile('factory.bmp');
Form1.Image1.canvas.Draw(0,0,Back);
// загрузить картинку, которая будет двигаться
bitmap.LoadFromFile('aplane.bmp');
// определим "прозрачный" цвет
bitmap.Transparent := True;
bitmap.TransparentColor := bitmap.canvas.pixels[1,1];
// создать буфер для сохранения копии области фона,
// на которую накладывается картинка
W:= bitmap.Width;
H:= bitmap.Height;
Buf.Width:= W;
Buf.Height:=H;
Buf.Palette:=Back.Palette; // Чтобы обеспечить соответствие палитр !!
Buf.Canvas.CopyMode:=cmSrcCopy;
// определим прямоугольную область буфера, которая будет использоваться
// для сохранения части фона, загораживаемого движущейся картинкой
BufRct:=Bounds(0,0,W,H);//не изменяется (выполняется один раз)
// начальное положение картинки
x := -W;
y := 20;
// определим сохраняемую область фона
BackRct:=Bounds(x,y,W,H);//изменяется (зависит от x,y)
// и сохраним ее
Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// освободим память, выделенную для хранения битовых образов
Back.Free;
bitmap.Free;
Buf.Free;
end;















