AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeiten mit Tobjectlist

Offene Frage von "KahPee"
Ein Thema von KahPee · begonnen am 13. Feb 2010 · letzter Beitrag vom 14. Feb 2010
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:15
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:18
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:21
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).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#24

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:27
Bei einer TObjectList kann man das Verhalten mit der Eigenschaft .OwnsObjects steuern.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:37
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#26

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 10:44
Du kannst auch NIL als Owner angeben. Steht <Liste>.OwnsObjects auf True wird die Liste beim Hinzufügen automatisch der Eigentümer.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: Arbeiten mit Tobjectlist

  Alt 14. Feb 2010, 11:10
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:
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 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