![]() |
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? |
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 |
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:
Demzufolge würde bei: Project.free ja auch Project.pages.last.pic "gefreet"; sowie alle anderen Objekte in "pages" (z.B. weitere Tobjectlists).
//Deklaration
Tproject=class save: Tsave; Pages: TseiteList; end; var project: Tproject; |
Re: Arbeiten mit Tobjectlist
Bei einer TObjectList kann man das Verhalten mit der Eigenschaft .OwnsObjects steuern.
|
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. |
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.
|
Re: Arbeiten mit Tobjectlist
Delphi-Quellcode:
Wenn ich nun im Programmcode ein Bild erzeuge:
Tseite=class
pic: Timage; //... end; Tproject=class save: Tsave; Pages: TseiteList; end; var project: Tproject;
Delphi-Quellcode:
wenn ich nun später das hier aufrufe:
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
Delphi-Quellcode:
so bleibt das Bild weiter auf der Form und ist nicht weg :/ wurde das also auch nicht freigegeben?
project.delete(0);//0= index von pages.last
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr. |
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