Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TObjectList als Owner von Controls? (https://www.delphipraxis.net/166574-tobjectlist-als-owner-von-controls.html)

messie 19. Feb 2012 20:55

TObjectList als Owner von Controls?
 
Moin,

ich horte einige meiner GUI-Controls zusammen mit deren Methoden und Properties in TObjectlists.
Zur Anzeige habe ich bisher eigene Fenster gehabt, die als Parent und Owner zugewiesen wurden und die nach der Übergabe der Parameter und dem Schließen des Fensters nil gesetzt wurden. Jetzt bin ich am basteln eines Ribbon-Fensters und möchte das Prinzip gerne beibehalten. Klappt aber nicht, weil ein Teil der Controls im Fenster kleben bleibt und nicht mit der TObjectList stirbt.

Daher die Frage: könnte man die TObjectList als Owner angeben und die grafische Kompo als Parent? Dann könnte ich das sauber aufräumen, ohne die einzelnen Controls jedesmal prüfen zu müssen, ob sie nun zum Fenster oder zur TObjectList gehören.

Grüße, Messie

jaenicke 19. Feb 2012 20:57

AW: TObjectList als Owner von Controls?
 
Erzeuge die TObjectList einfach mit dem Parameter True, dann gibt diese die Objekte selbst wieder frei, wenn sie aus der Liste entfernt werden (auch bei Zerstörung der Liste).

messie 19. Feb 2012 21:21

AW: TObjectList als Owner von Controls?
 
Hmm, das geht auch noch nicht, vielleicht liegt es auch an mir. Ich habe einen constructor, da setze ich "OwnsObjects" auf true. Das hilft aber nicht.

Grüße, Messie

jaenicke 19. Feb 2012 22:51

AW: TObjectList als Owner von Controls?
 
Die Objekte in der TObjectList werden definitiv freigegeben. Das Problem muss woanders liegen...
Vielleicht sind die betreffenden Objekte doch nicht in der Liste oder so.

Sir Rufo 20. Feb 2012 00:05

AW: TObjectList als Owner von Controls?
 
Der Owner von einem TComponent muß vom Typ TComponent sein, und eine TList (davon wird TObjectList abgeleitet) wird nicht von TComponent abgeleitet, somit kann man also so eine Liste nicht als Owner übergeben.

Aber wozu auch?

Wozu wird denn bei TComponent ein Owner übergeben? Eben, weil man die Kontrolle über den Lebenszyklus an eben diesen Owner delegiert.

Sollen diese Komponente nun mit einer TObjectList (OwnsObjects=True) verwaltet werden, dann übergibt man die Komponente eben dieser TObjectList und fertig ist. Die Delegation ist damit erfolgt. Allerdings gibt man beim Erzeugen als Owner eben nil an. Sonst delegiert man ja doppelt.

Die Eigenschaft Parent gibt nur an, wo die Komponente gezeichnet werden soll. Und diese Eigenschaft hat nichts mit dem Owner zu tun. Die können durchaus gleich sein ... müssen aber nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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 by Thomas Breitkreuz