Самолет летит по небу |
Previous Top Next |
Code: |
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. |
©Drkb::03757
DelphiWorld 6.0