Самолет летит по небу

Советы » Canvas » Самолет летит по небу

unit

aplane_;

interface



uses


  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   ExtCtrls, StdCtrls, Buttons;
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


  Form1: TForm1;

implementation



{$R *.DFM} 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);   // и сохраним ее   Buf.Canvas.CopyRect(BufRct, Back.Canvas, BackRct); end

;

// обработка сигнала таймера
procedure

TForm1.Timer1Timer(Sender: TObject); begin


  // восстановлением фона (из буфера) удалим рисунок
  Form1.image1.canvas.Draw(x, y, Buf);
  x := x + 2;
  if

x > form1.Image1.Width then

    x := -W;
  // определим сохраняемую область фона   BackRct := Bounds(x, y, W, H);   // сохраним ее копию   Buf.Canvas.CopyRect(BufRct, Back.Canvas, BackRct);
  // выведем рисунок   Form1.image1.canvas.Draw(x, y, bitmap); end

;

// завершение работы программы
procedure

TForm1.FormClose(Sender: TObject; var

Action: TCloseAction);
begin


  // освободим память, выделенную   // для хранения битовых образов   Back.Free;
  bitmap.Free;
  Buf.Free;
end

;

end

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com