Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Free-Methode (https://www.delphipraxis.net/124571-free-methode.html)

hackepjotre 21. Nov 2008 07:47


Free-Methode
 
Hallo,

ich hab in meinem Programm zuerst ein TPanel während der Laufzeit erstellt...

Delphi-Quellcode:
otab[1].box := tpanel.Create(otab[1].box);
später hab ich es mit der free-methode gelöscht:

Delphi-Quellcode:
otab[1].box.Free;
wenn dann in dem gleichen programm wieder das Panel erstellen will kommt ein Fehler

Delphi-Quellcode:
otab[1].box := tpanel.Create(otab[1].box);
Fehler: "Im Project1.exe ist eine Exception der Klasse EAbstractError aufgetreten. Meldung Abstrakter Fehler"

Weiss jemand woran das liegt?

Schöne Grüße
Adrian Klinger

jfheins 21. Nov 2008 07:50

Re: Free-Methode
 
Versuche mal FreeAndNil(otab[1].box) statt otab[1].box.Free; ...

Aber wieso übergibst du em Panel im Konstruktor eigentlich die Variable, der es zugewiesen wird? Wenn da nichts sinnvolles drinsteht wird es natürlich krachen ;)

hackepjotre 21. Nov 2008 07:53

Re: Free-Methode
 
Was müsste man denn da rein schreiben? Den Parent von dem TPanel?

jfheins 21. Nov 2008 07:55

Re: Free-Methode
 
Du kannst Form1 da rein schreiben. Du übergibst den Owener, der sich darum kümmert, dass das Objekt am Ende der Laufzeit freigegeben wird.

Wenn du kein Form hast, übergib einfach nil ;)

hackepjotre 21. Nov 2008 07:57

Re: Free-Methode
 
ok dankeschön :-D

DP-Maintenance 21. Nov 2008 08:12

DP-Maintenance
 
Dieses Thema wurde von "Dax" von "Open-Source" nach "Object-Pascal / Delphi-Language" verschoben.
Open-Source ist das ja nicht?

generic 21. Nov 2008 08:52

Re: Free-Methode
 
Das Problem ist eigendlich ein anderes.

otab[1].box ist beim start nil
also ist bei erzeugen des Paneles der Owner auch nil (s.h. Create Parameter)
Gibts du nun das Panel frei, ist der Zeiger in otab[1].box ungültig.

Wenn du nun ein neues Panel erzeugst, ist der Owner ein freigegebenes Panel.
Was natürlich nicht geht.

Übergib beim Create immer NIL oder das Form.
Bei NIL musst du dich selbst um das Freigeben kümmern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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