AGB  ·  Datenschutz  ·  Impressum  







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

Freigeben von Komponenten

Ein Thema von idefix2 · begonnen am 10. Jun 2017 · letzter Beitrag vom 11. Jun 2017
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Freigeben von Komponenten

  Alt 10. Jun 2017, 21:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Freigeben von Komponenten

  Alt 10. Jun 2017, 22:50
Selbst wenn die Listbox zu dem Zeitpunkt schon freigegeben wäre, was nicht der Fall ist, dürfte doch Free keine Exception auslösen.
Doch, wenn DU oder jemand Anderes die Variable nicht auf nil setzt, dann steht danach Schrott in dem Zeiger und Schrott knallt schön, wenn man damit was machen will.

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
http://docwiki.embarcadero.com/Libra...Control.Parent
Wobei das für mich immernoch ein total falsche Verhalten ist, was man entdlich "reparieren" sollte.
$2B or not $2B
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: Freigeben von Komponenten

  Alt 11. Jun 2017, 01:05
Selbst wenn die Listbox zu dem Zeitpunkt schon freigegeben wäre, was nicht der Fall ist, dürfte doch Free keine Exception auslösen.
Doch, wenn DU oder jemand Anderes die Variable nicht auf nil setzt, dann steht danach Schrott in dem Zeiger und Schrott knallt schön, wenn man damit was machen will.
Ok, mir fällt jetzt auf, dass ein Owner oder Parent, wer auch immer, der seine Komponenten freigibt, das natürlich über seine Komponentenliste (Components bzw. Controls) erledigen wird und er von der privaten Variable der Tedit, die auf die Komponente zeigt, gar nichts weiß und auch nichts wissen will. Die Variable kann also wohl beim Freigeben gar nicht nil gesetzt werden, und das zu erwarten war wohl ein Fehlschluss.

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?

Geändert von idefix2 (11. Jun 2017 um 01:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Freigeben von Komponenten

  Alt 11. Jun 2017, 01:36
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.
$2B or not $2B
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Freigeben von Komponenten

  Alt 11. Jun 2017, 11:38
ok, danke, das beruhigt mich. Weil Komponenten gebe ich in meinen Programmen öfters frei, und darum habe ich mich nie gekümmert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:06 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