Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Obejekt aus Array löschen (https://www.delphipraxis.net/165699-obejekt-aus-array-loeschen.html)

AlexW93 12. Jan 2012 08:35

Delphi-Version: 5

Obejekt aus Array löschen
 
Hallo,

ich möchte ein Objekt aus einem Array löschen. Scheint aber so, als ob es mit 'destroy' nicht funktioniert.

Hier ein Beispiel:
Delphi-Quellcode:
//Das ist nur ein Beispiel, sieht in meinem Projekt natürlich nicht so aus

var
  blocks:array[0..19,0..19] of TShape;


procedure loeschen;
begin
  blocks[1,2].Destroy;
end;

procedure istVorhanden;
begin
  if blocks[1,2]=NIL then
     machWas;
end;
Nun weiß ich nicht, ob ich mit NIL abfragen muss oder ob ich das Objekt irgendwie anders löschen muss.

Danke für die Antwort schon im Voraus

mfg. AlexW93

DeddyH 12. Jan 2012 08:37

AW: Obejekt aus Array löschen
 
Versuch es mal mit
Delphi-Quellcode:
procedure loeschen;
begin
  FreeAndNil(blocks[1,2]);
end;

himitsu 12. Jan 2012 08:41

AW: Obejekt aus Array löschen
 
Destroy besser nicht direkt aufrufen. (steht übrigens auch in der OH)

Wenn du auf NIL prüfen willst, dann mußt du das natürlich auch setzen. :zwinker:
Delphi-Quellcode:
procedure loeschen;
begin
  blocks[1,2].Free;
  blocks[1,2] := nil;
end;

procedure istVorhanden;
begin
  if not Assigned(blocks[1,2]) then // sowas ist auch möglich
     machWas;
end;
Oder als eine gemeinsame Funktion:
Delphi-Quellcode:
procedure loeschen;
begin
  FreeAndNil(blocks[1,2]);
end;
FreeAndNil setzt die Variable "sicher" auf NIL, denn eigentlich müßte sie NilAndFree heißen.
Dort wird erst die Variable auf NIL gesetzt und erst dann .Free aufgerufen.
Selbst Wenn es im Free knallt (Exception), dann ist die Variable dennoch NIL.


[edit] Oh, eine RedBox ( die lebt doch noch? ).
Egal, diemal ignorier ich dich einfach :angle2:

AlexW93 12. Jan 2012 08:44

AW: Obejekt aus Array löschen
 
Danke für die schnelle Antwort!
Wenn ich zuhause bin, werd ich das gleich ausprobierten.

mfg AlexW


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz