Hogyan kell megsemmisíteni a létrehozott objektumo(ka)t? Most úgy csinálom, hogy egy tömbbe mentem az objektumazonosítót, majd ha nem kell, akkor a
nil értéket adom neki - de valamiért nem jó, mert jobb egérkattintásra még mindig mutatja a labdákat, holott erre kéne eltűnnie az összesnek. Ha odaírom, hogy
destroy vagy
free, az sem jó neki. Itt a teljes kód:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TFoAblak }
TFoAblak = class(TForm)
KepFrissito: TTimer;
//procedure FormClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure KepFrissitoTimer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type TLabda=class(TObject)
var xhely,yhely: integer;
kepe: TBitmap;
private
public
constructor letrehoz(xhelyitt,yhelyitt: integer; kepeitt: Tbitmap);
end;
var
FoAblak: TFoAblak;
labdakep: Tbitmap;
egylabda: TLabda;
labdadb: integer;
labdatomb: array [1..100] of TLabda;
implementation
{$R *.lfm}
constructor TLabda.letrehoz(xhelyitt,yhelyitt: integer; kepeitt: Tbitmap);
begin
xhely:=xhelyitt;
yhely:=yhelyitt;
kepe:=kepeitt;
end;
{ TFoAblak }
{procedure TFoAblak.FormClick(Sender: TObject);
var egerhely: TPoint;
begin
egerhely:=FoAblak.ScreenToClient(mouse.cursorpos);
egylabda:=TLabda.letrehoz(egerhely.x,egerhely.y,labdakep);
FoAblak.Canvas.Draw(egylabda.xhely,egylabda.yhely,egylabda.kepe);
end; }
procedure TFoAblak.FormCreate(Sender: TObject);
begin
labdakep:=TBitmap.Create;
labdakep.LoadFromFile('labdabmp.bmp');
labdadb:=1;
end;
procedure TFoAblak.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i: integer;
begin
case button of
mbLeft:
begin
egylabda:=TLabda.letrehoz(x,y,labdakep);
//FoAblak.Canvas.Draw(egylabda.xhely,egylabda.yhely,egylabda.kepe);
labdatomb[labdadb]:=egylabda;
inc(labdadb);
end;
mbRight:
begin
for i:=1 to labdadb-1 do
begin
labdatomb[i]:=nil;
end;
//labdadb:=1;
end;
end;
end;
procedure TFoAblak.KepFrissitoTimer(Sender: TObject);
var i: integer;
begin
for i:=1 to labdadb-1 do
begin
if labdatomb[i]<>nil then
FoAblak.Canvas.Draw(labdatomb[i].xhely,labdatomb[i].yhely,labdatomb[i].kepe);
end;
KepFrissito.Interval:=10;
end;
end.