Kód: Vybrať všetko
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Formdestroy(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseDown2(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TObrazok = class
PoleBmp: array of TBitmap;
X, Y, Faza: Integer;
C: TCanvas;
constructor Create(CC: TCanvas; Meno: string;
PocetFaz, XX, YY: Integer);
constructor Create1(CC: TCanvas; Meno: string;
PocetFaz, XX, YY: Integer);
destructor Destroy; override;
procedure Kresli; virtual;
procedure Krok; virtual;
end;
constructor TObrazok.Create(CC: TCanvas; Meno: string;
PocetFaz, XX, YY: Integer);
var
I: Integer;
begin
SetLength(PoleBmp, PocetFaz);
for I := 0 to High(PoleBmp) do
begin
PoleBmp[I] := TBitmap.Create;
PoleBmp[I].LoadFromResourceName(HInstance, Meno + IntToStr(I));
PoleBmp[I].Transparent := True;
end;
X := XX;
Y := YY;
Faza := 0;
C := CC;
end;
destructor TObrazok.Destroy;
var
I: Integer;
begin
for I := 0 to High(PoleBmp) do
PoleBmp[I].Free;
end;
procedure TObrazok.Kresli;
begin
C.Draw(X - PoleBmp[Faza].Width div 2, Y - PoleBmp[Faza].Height div 2, PoleBmp[Faza]);
end;
procedure TObrazok.Krok;
begin
Faza := (Faza+1) mod Length(PoleBmp);
end;
var
PoleObr: array of TObrazok;
Pozadie: TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
begin
Pozadie := TBitmap.Create;
Pozadie.LoadFromResourceName(HInstance, 'forest');
Image1.Canvas.Draw(0, 0, Pozadie);
DoubleBuffered := True;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
Pozadie.Free;
for I := 0 to High(PoleObr) do
PoleObr[I].Free;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetLength(PoleObr, Length(PoleObr)+1);
PoleObr[High(PoleObr)] := TObrazok.Create(Image1.Canvas, 'vtak', 8, X, Y);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
I: Integer;
begin
if PoleObr = nil then
Exit;
Image1.Canvas.Draw(0, 0, Pozadie);
for I := 0 to High(PoleObr) do
begin
PoleObr[I].Krok;
PoleObr[I].Kresli;
end;
end;
constructor TObrazok.Create1(CC: TCanvas; Meno: string;
PocetFaz, XX, YY: Integer);
var
I, Sirka, Vyska: Integer;
PomBmp: TBitmap;
begin
SetLength(PoleBmp, PocetFaz);
PomBmp := TBitmap.Create;
try
PomBmp.LoadFromResourceName(HInstance, Meno);
Sirka := PomBmp.Width div PocetFaz;
Vyska := PomBmp.Height;
for I := 0 to High(PoleBmp) do
begin
PoleBmp[I] := TBitmap.Create;
with PoleBmp[I] do
begin
Width := Sirka;
Height := Vyska;
Canvas.Draw(-I*Sirka, 0, PomBmp);
Transparent := True;
end;
end;
finally
PomBmp.Free;
end;
X := XX;
Y := YY;
Faza := 0;
C := CC;
end ;
procedure TForm1.Image1MouseDown2(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Obr: TObrazok;
begin
case Random(2) of
0: Obr := TObrazok.Create(Image1.Canvas, 'vtak', 8, X, Y);
1: Obr := TObrazok.Create1(Image1.Canvas, 'zajo', 8, X, Y);
end;
SetLength(PoleObr, Length(PoleObr)+1);
PoleObr[High(PoleObr)] := Obr;
end;
end.