![]() |
Freigeben von Komponenten
In einer von TEdit abgeleiteten Komponente erzeuge ich ein TPanel und in dem TPanel eine TListbox. Es sollte daraus eine etwas flexiblere Kombobox werden.
TPanel und Tlistbox haben als Owner mein abgeleitetes TEdit. Mir ist schon klar, dass ich untergeordnete Komponenten am Ende nicht freigeben MUSS. Ich habe es im Destroy des TEdits unnötigerweise trotzdem gemacht und da knallt es beim Freigeben der Listbox. Ich habe im Debugger überprüft, dass die Listbox zu dem Zeitpunkt noch existiert, warum gibt es da bei der manuellen Freigabe eine Exception? Selbst wenn die Listbox zu dem Zeitpunkt schon freigegeben wäre, was nicht der Fall ist, dürfte doch Free keine Exception auslösen. Es ist natürlich kein Problem, das Free aus dem Programmcode zu entfernen, aber ich würde trotzdem gerne wissen, warum das nicht geht. |
AW: Freigeben von Komponenten
Zitat:
Achtung, die VCL und TControl ist extrem blöd, denn nicht nur der Owner gibt etwas frei, sondern leider auch der Parent. Da war jemand einfach nur saudoof, als er das vor vielen Jahren verbockt hat, aber leider ist das immernoch so und leider übersieht jeder die Anmerkung ![]() Wobei das für mich immernoch ein total falsche Verhalten ist, was man entdlich "reparieren" sollte. |
AW: Freigeben von Komponenten
Zitat:
Bedeutet das aber nicht, dass man Komponenten prinzipiell gar nicht selbst freigeben darf? Denn von einem x.free bekommt ja vermutlich weder die Components-Liste noch die Controls-Liste etwas mit? Was ist da die korrekte Vorgangsweise, wenn ich eine Komponente vorzeitig entsorgen will? Muss ich die vorher explizit aus der Controls Liste des Parent und aus der Components Liste des owners entfernen? |
AW: Freigeben von Komponenten
Dafür gibt es in der VCL eine FreeNotification, wo sich die Kmponenten gegenseitig registieren und bei Freigabe den jeweils Anderen informieren.
Der setzt dann bei sich die Variable auf nil und gut ist. |
AW: Freigeben von Komponenten
ok, danke, das beruhigt mich. Weil Komponenten gebe ich in meinen Programmen öfters frei, und darum habe ich mich nie gekümmert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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