Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arbeiten mit Tobjectlist (https://www.delphipraxis.net/147670-arbeiten-mit-tobjectlist.html)

KahPee 14. Feb 2010 09:15

Re: Arbeiten mit Tobjectlist
 
Ehm ja.. das war dämlich.. Die Deklarationen von daywalker waren völlig richtig. PAges.last gibt selbstverständlich ein Objekt des Typs Tseite aus und nicht den Integer des letzten Objekts.. das war ein Denkfehler meinerseits.

Wenn ich das richtig verstanden habe muss ich jetzt noch die anderen Funktionen (Delete, move, etc.) sodenn ich sie brauche anpassen.

Vorweg jetzt aber noch einmal die Frage zu den Ownern, damit ich keine Speicherlöcher produziere:
Pages.Last.pic:=TImage.create;

Wird diese Image nun bei Pages.last.delete wieder freigegeben? Oder muss ich das manuell machen?

mkinzler 14. Feb 2010 09:18

Re: Arbeiten mit Tobjectlist
 
Ja, der Eigentümer gibt seinen "Besitz" bei seinem "Tod" frei

Alternative wäre, wie Frank schon erwähnt hat, eine generische Liste zu verwenden. Dafür wäre aber D2009 notwendig

KahPee 14. Feb 2010 09:21

Re: Arbeiten mit Tobjectlist
 
Heißt das, dass bei Klassen immer alles untergeordneten Klassen mit freigegeben werden, wenn die Klasse freigegeben wird?
wird also auch die ganze Tobjectlist "Pages" freigegebn wenn "project.free"
Delphi-Quellcode:
//Deklaration
Tproject=class
    save: Tsave;
    Pages: TseiteList;
  end;

var project: Tproject;
Demzufolge würde bei: Project.free ja auch Project.pages.last.pic "gefreet"; sowie alle anderen Objekte in "pages" (z.B. weitere Tobjectlists).

mkinzler 14. Feb 2010 09:27

Re: Arbeiten mit Tobjectlist
 
Bei einer TObjectList kann man das Verhalten mit der Eigenschaft .OwnsObjects steuern.

KahPee 14. Feb 2010 09:37

Re: Arbeiten mit Tobjectlist
 
Das Problem ist aber, dass man beim Kreiren von Timage einen Owner angeben muss.. TObjectlist funktioniert als Owner nicht. Daher muss ich das im Moment extra freigeben. Kann man das irgendwie so gestalten, dass das Image bei Pages.delete(index) auch freigegeben wird. Genauso wie andere unterklassen? Manuell ist das ja recht aufwendig.

Das die Objektliste alle Objekte freigibt habe ich schon verstanden. Aber ich glaube, dass bei dem Freigeben eines Objekts, des Typs Tseite noch nicht von alleine auch das untergeordnete .pic (Timage) freigegeben wird.

mkinzler 14. Feb 2010 09:44

Re: Arbeiten mit Tobjectlist
 
Du kannst auch NIL als Owner angeben. Steht <Liste>.OwnsObjects auf True wird die Liste beim Hinzufügen automatisch der Eigentümer.

KahPee 14. Feb 2010 10:10

Re: Arbeiten mit Tobjectlist
 
Delphi-Quellcode:
Tseite=class
  pic: Timage;
  //...
end;

Tproject=class
    save: Tsave;
    Pages: TseiteList;
  end;
 

var project: Tproject;
Wenn ich nun im Programmcode ein Bild erzeuge:
Delphi-Quellcode:
project.pages:= Tseitelist.create; //Ownsobjects automatisch auf true
projec.pages.add(Tseite.create);
project.pages.last.pic:=Timage.create(nil); //Bild erstellen
project.pages.parent:=Mainform;
 //auf dem Bild wird nachfolgend was gezeichnet
wenn ich nun später das hier aufrufe:
Delphi-Quellcode:
project.delete(0);//0= index von pages.last
so bleibt das Bild weiter auf der Form und ist nicht weg :/ wurde das also auch nicht freigegeben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
Seite 3 von 3     123   

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