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

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

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.


DelphiWorld 6.0

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...