Przepraszam że nie doszukałam się odpowiedzi na moje pytanie we wcześniejszych postach. Ale proszę o pomoc.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Math, Spin;

type
TZwierz = class(TShape)
private
m_posX, m_posY, m_Angle : double;
function GetPosX: double;
procedure SetPosX(const Value: double);
function GetPosY: double;
procedure SetPosY(const Value: double);
function GetAngle: double;
procedure SetAngle(const Value: double);
public
DuckCounter : integer;
Speed : Double;
property Angle : double read GetAngle write SetAngle;
property posX : double read GetPosX write SetPosX;
property posY : double read GetPosY write SetPosY;
procedure Move(iTimePass : double);
procedure CalculateAngle(zOfiara : TZwierz);
function OverlayCheck(zOfiara : TZwierz) : Boolean;
function GetDistance(zOfiara : TZwierz) : Double;
end;

type
TfrmPole = class(TForm)
tmrGaniacz: TTimer;
pbxPole: TPaintBox;
pnlConfig: TPanel;
gbPies: TGroupBox;
lblPiesSpid: TLabel;
sePiesSpeed: TSpinEdit;
gbZajac: TGroupBox;
lblZajacSpid: TLabel;
lblZajacAngle: TLabel;
seZajacSpeed: TSpinEdit;
seZajacAngle: TSpinEdit;
btnStart: TButton;
tmrZjadacz: TTimer;
lblMniam: TLabel;
cbDuck: TCheckBox;
trasa: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure tmrGaniaczTimer(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure pbxPoleMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure seZajacSpeedChange(Sender: TObject);
procedure seZajacAngleChange(Sender: TObject);
procedure sePiesSpeedChange(Sender: TObject);
procedure tmrZjadaczTimer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
Zajac, Pies : TZwierz;
{ Private declarations }
public
{ Public declarations }
end;

var
frmPole: TfrmPole;

implementation

{$R *.dfm}

function TZwierz.GetAngle: double;
begin
GetAngle := m_Angle;
end;

procedure TZwierz.SetAngle(const Value: double);
begin
m_Angle := CycleToDeg(Frac(DegToCycle(Value)));
if m_Angle > 180 then m_Angle := m_Angle - 360;
end;

function TZwierz.GetPosX: double;
begin
GetPosX := m_posX;
end;

procedure TZwierz.SetPosX(const Value: double);
begin
m_posX := Value;
Self.Left := Round(Value - Self.Width / 2);
end;

function TZwierz.GetPosY: double;
begin
GetPosY := m_posY;
end;

procedure TZwierz.SetPosY(const Value: double);
begin
m_posY := Value;
Self.Top := Round(Value - Self.Height / 2);
end;

procedure TZwierz.Move(iTimePass: double);
begin
posX := posX + Self.Speed * iTimePass * cos(DegToRad(Self.Angle));
posY := posY + Self.Speed * iTimePass * sin(DegToRad(Self.Angle));
frmPole.trasa.Canvas.Pixels[Round(posX),Round(posY)]:=0;
end;
procedure TZwierz.CalculateAngle(zOfiara : TZwierz);
begin
if Self.posX = zOfiara.posX then
if zOfiara.posY > Self.posY then
Self.Angle := 90
else
Self.Angle := -90
else
Self.Angle := RadToDeg(ArcTan2(zOfiara.posY - self.posY, zOfiara.posX - self.posX));
end;

function TZwierz.GetDistance(zOfiara: TZwierz): Double;
begin
GetDistance := Sqrt(Sqr(Self.posX - zOfiara.posX) + Sqr(Self.posY - zOfiara.posY))
end;

function TZwierz.OverlayCheck(zOfiara: TZwierz): Boolean;
begin
OverlayCheck := GetDistance(zOfiara) < Self.Width / 2 + zOfiara.Width / 2;
end;

procedure TfrmPole.FormCreate(Sender: TObject);
begin

Randomize;
Zajac := TZwierz.Create(self);
Zajac.Width := 10;
Zajac.Height := 10;
Zajac.Shape := stCircle;
Zajac.Pen.Color := clGray;
Zajac.Brush.Color := clGray;
Zajac.posX := 20;
Zajac.posY := 20;
Zajac.DuckCounter := 0;
Zajac.Angle := seZajacAngle.Value;
Zajac.Speed := seZajacSpeed.Value;

Zajac.Parent := Self;
Zajac.Visible := true;

Pies := TZwierz.Create(self);
Pies.Width := 15;
Pies.Height := 15;
Pies.Shape := stCircle;
Pies.Pen.Color := clBlack;
Pies.Brush.Color := clBlack;

Pies.posX := 10;
Pies.posY := 250;
Pies.Speed := sePiesSpeed.Value;

Pies.Parent := self;
Pies.Visible := true;
end;

procedure TfrmPole.FormDestroy(Sender: TObject);
begin
Zajac.Free;
Pies.Free;
end;

procedure TfrmPole.seZajacSpeedChange(Sender: TObject);
begin
Zajac.Speed := seZajacSpeed.Value;
end;

procedure TfrmPole.seZajacAngleChange(Sender: TObject);
begin
Zajac.Angle := seZajacAngle.Value;
end;

procedure TfrmPole.sePiesSpeedChange(Sender: TObject);
begin
Pies.Speed := sePiesSpeed.Value;
end;

procedure TfrmPole.pbxPoleMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
Zajac.posX := X;
Zajac.posY := Y;
end else begin
Pies.posX := X;
Pies.posY := Y;
end;

Zajac.Brush.Color := clGray;
Zajac.Pen.Color := clGray;
lblMniam.Visible := false;
end;
procedure TfrmPole.btnStartClick(Sender: TObject);
begin
if tmrGaniacz.Enabled or tmrZjadacz.Enabled then
tmrGaniacz.Enabled := false
else
tmrGaniacz.Enabled := true;
tmrZjadacz.Enabled := false;
if tmrGaniacz.Enabled then begin
Pies.Speed := sePiesSpeed.Value;
Zajac.Speed := seZajacSpeed.Value;
Zajac.Angle := seZajacAngle.Value;
btnStart.Caption := 'STOP !!!';
lblMniam.Visible := false;
end else
btnStart.Caption := 'START !!!';
end;

procedure TfrmPole.tmrGaniaczTimer(Sender: TObject);
begin
Pies.CalculateAngle(Zajac);
Pies.Move(tmrGaniacz.Interval / 1000);
Zajac.Move(tmrGaniacz.Interval / 1000);

if Zajac.DuckCounter > 0 then Dec(Zajac.DuckCounter);
if (Zajac.posX > pbxPole.Width - Zajac.Width) or (Zajac.posX < Zajac.Width) then
Zajac.Angle := 180 - Zajac.Angle;
if (Zajac.posY > pbxPole.Height - Zajac.Height) or (Zajac.posY < Zajac.Height) then
Zajac.Angle := -Zajac.Angle;
if Pies.OverlayCheck(Zajac) then begin
Zajac.Brush.Color := $000000C6;
Zajac.Pen.Color := $000000C6;
tmrGaniacz.Enabled := false;
tmrZjadacz.Enabled := true;
end else if cbDuck.Checked and (Zajac.DuckCounter = 0) then begin
if Pies.GetDistance(Zajac) < Zajac.Width + Pies.Width then begin
Zajac.Angle := Zajac.Angle + (RandomRange(0, 1) * 2 - 1) * 90;
Zajac.DuckCounter := 200;
end;
end;
end;

procedure TfrmPole.tmrZjadaczTimer(Sender: TObject);
begin
Pies.Speed := -Sign(Pies.Speed) * 1.5;
Pies.Move(1);
Zajac.Speed := 1;
Zajac.CalculateAngle(Pies);
Zajac.Move(1);
if Zajac.GetDistance(Pies) < 1 then begin
lblMniam.Left := Pies.Left - lblMniam.Width div 2;
if Pies.Top > lblMniam.Height + 10 then
lblMniam.Top := Pies.Top - lblMniam.Height - 5
else
lblMniam.Top := Pies.Top + Pies.Height + 5;
lblMniam.Visible := true;
btnStart.Click;
end;
end;

end.

Dlaczego nie rysuje proszę bardzo o jakąkolwiek wskazówkę.