AGB  ·  Datenschutz  ·  Impressum  







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

TObjectList: AV wenn OwnsObject := True

Ein Thema von Luckie · begonnen am 22. Jan 2007 · letzter Beitrag vom 22. Jan 2007
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#31

Re: TObjectList: AV wenn OwnsObject := True

  Alt 22. Jan 2007, 14:58
Du musst das schon mit diesem TImageEnVect versuchen, alles andere hat keinen Sinn
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#32

Re: TObjectList: AV wenn OwnsObject := True

  Alt 22. Jan 2007, 15:13
Zitat von Luckie:
Auch damit bekomme ich eine AV, auch wenn ich im Destruktor den parent auf nil setze:
self.Items[i].Parent := nil; Das ist irgendwie alles nichts. Ich glaube, ich bleibe doch bei meiner TList.
Du solltest auch tunlichst dem Parent mitteilen, dass sein Child nicht mehr gültig ist, nicht umgekehrt. Wenn Du control.Parent := Blubb verwendest, dann wird bei dieser Zuweisung Blubb.insertControl(control) aufgerufen, ist Blubb hier nil, nun ja, dann wird das natürlich nicht aufgerufen, aber der alte Parent bekommt davon so nichts mit. Deswegen solltest du removeControl (vom Parent aus) verwenden (denke die Methode heißt so, ist jetzt aber aus dem Kopf, lieber nochmal nachschauen!).

Am einfachsten ist es, wenn Du eine Liste von TComponentList ableitest, sagen wir mal TControlList. In dieser musst Du nur den Destruktor überschreiben und für alle Kinder vor dem Aufruf des geerbten Konstruktors dann etwas aufrufen wie:

Delphi-Quellcode:
var i: Integer;
begin
  if self.OwnsObjects and (self.Count > 0) then
  begin
    for i := 0 to self.Count - 1 do
    begin
      self[i].Parent.RemoveControl(self[i]);
    end;
  end;

  inherited destroy;
end;
Ach ja, natürlich darfst Du dann auch nur TControl-Instanzen einfügen.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#33

Re: TObjectList: AV wenn OwnsObject := True

  Alt 22. Jan 2007, 15:17
Zitat von Die Muhkuh:
Du musst das schon mit diesem TImageEnVect versuchen, alles andere hat keinen Sinn
Hab ich jetz au gemacht, hab alles gemacht was Luckie da oben auch zugewiesen hat, kommt immernoch kein Fehler...

Edit: jetzt wo ich die Kompos schon hab kannst des ding au ma schicken oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#34

Re: TObjectList: AV wenn OwnsObject := True

  Alt 22. Jan 2007, 15:44
Hallo Leute,

ich habe jetzt noch einmal mit TComponentList und Delphi 6 getestet. Beliebig viele TImage-Komponenten (Owner=nil) werden dynamisch erzeugt und auf einem Panel abgelegt, zusätzlich werden Referenzen auf die TImages in einer TComponentList (OwnsObjects=True) gespeichert. Nach dem Zerstören des Panels und der damit verbundenen automatischen Freigabe der TImages enthält die TObjectList keine Elemente mehr. Beim Freigeben der Form kann somit in deren OnDestroy-Handler die Liste ohne Probleme freigegeben werden. Auch das Freigeben der Liste zur Laufzeit funktioniert, die TImages werden dann automatisch vom Panel entfernt. Das alles funktioniert ohne Änderung an der TComponentList.

Der Fehler muß meiner Meinung nach im restlichen Code zu suchen sein - vielleicht in der Komponente TImageEnVect, wie Die Muhkuh ja in Beitrag #14 schon angedeutet hat.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 20:16 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