AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisch Erzeugte Frames finden

Ein Thema von jacky213 · begonnen am 28. Jun 2019 · letzter Beitrag vom 29. Jun 2019
Antwort Antwort
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 07:59
ist die Liste der Eigentümer
Dabei sollte man aber beachten, dass alle Controls, denen man einen Parent zuweist auch schon einen Eigentümer haben. Wird dieser Parent jetzt aus dem Speicher geworfen dann nimmt der alle seine Kinder mit und in der schönen Liste stehen ungültige Referenzen und es rummst beim Versuch diese zu löschen.

Also auch hier aufpassen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 08:14
und in der schönen Liste stehen ungültige Referenzen und es rummst beim Versuch diese zu löschen.
In System.Generics.Collection vermisse ich eine TComponentList<TComponent> als Pendant zu der alten TComponentList in System.Contnrs. Dort brauchte man sich auch darum nicht kümmern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 08:21
ist die Liste der Eigentümer
Dabei sollte man aber beachten, dass alle Controls, denen man einen Parent zuweist auch schon einen Eigentümer haben. Wird dieser Parent jetzt aus dem Speicher geworfen dann nimmt der alle seine Kinder mit und in der schönen Liste stehen ungültige Referenzen und es rummst beim Versuch diese zu löschen.

Also auch hier aufpassen.
EDIT: Folgendes stimmte nicht:
Das ist falsch, Du verwechselst hier "Owner" und "Parent". Der Parent gibt nichts frei, nur der Owner.

Schokohase hat Recht, TWinControl.Destroy gibt alle Controls frei.

Aber im Prinzip gilt: Für die Freigabe eines Objekts (auch Controls sind Objekte) sollte immer nur einer zuständig sein:
* Owner (bei Components) - oder
* TObjectList - oder
* der eigene Code (z.B. per try ..finally

Interfaces lasse ich jetzt mal außen vor, das würde nur verwirren.
Thomas Mueller

Geändert von dummzeuch (29. Jun 2019 um 09:02 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 08:37
Das ist falsch, Du verwechselst hier "Owner" und "Parent". Der Parent gibt nichts frei, nur der Owner.
Aha, tu ich das?

Was sagt die Doku dazu?

http://docwiki.embarcadero.com/Libra...Control.Parent

Zitat:
Anmerkung: Die in TControl deklarierte Eigenschaft Parent ähnelt der Eigenschaft Owner von TComponent darin, dass die hier angegebenen Objekte für das Freigeben des Steuerelements zuständig sind.
Gut, die VCL ist ja auch Neuland, das kann man nicht wissen
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 08:51
Das ist falsch, Du verwechselst hier "Owner" und "Parent". Der Parent gibt nichts frei, nur der Owner.
Aha, tu ich das?

Was sagt die Doku dazu?

http://docwiki.embarcadero.com/Libra...Control.Parent

Zitat:
Anmerkung: Die in TControl deklarierte Eigenschaft Parent ähnelt der Eigenschaft Owner von TComponent darin, dass die hier angegebenen Objekte für das Freigeben des Steuerelements zuständig sind.

Ich bin versucht, die Doku in Zweifel zu ziehen (wäre nicht das erst Mal, dass da Mist steht), aber ich werde mir gleich mal den Source dazu ansehen und es testen.

OK, Du hast Recht und die Doku stimmt:

Delphi-Quellcode:
destructor TWinControl.Destroy;
var
  I: Integer;
  Instance: TControl;
begin
  // [...]
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy;
    I := ControlCount;
  end;
  // [...]
  inherited Destroy;
end;
Gut, dass ich keine Wette drauf abgeschlossen habe.

[Weitere Bemerkung gelöscht.]
Thomas Mueller

Geändert von dummzeuch (29. Jun 2019 um 09:01 Uhr)
  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 05:24 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-2025 by Thomas Breitkreuz