Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: sporadische Exception beim Freigeben von TLabels

  Alt 27. Dez 2022, 16:59
Ja, erstmal keine Threads.

Und dann ist eine TComponentList besser, als eine TObjectList.
Oder einfach ein TComponent als Container/Liste. (weil Delphi leider Ersteres hat, aber mal wieder nicht öffentlich und man es daher selber bauen muß)
Bzw. ein Owner-Objekt nutzen und dann statt TagLabelList.Clear diesen Owner freigeben und einen Neuen erstellen.



Wo sind denn die Labels drauf?
Das wird nicht zufällig freigegeben, bevor du deine TagLabelList leer machst?

Genau dafür ist eine ComponentList, denn dort löscht das Label sich selbst raus, wenn es von jemand Anderem freigegeben würde.


Zitat:
Das sieht für mich so aus, als würde das Parent-Panel versuchen, während des Freigebens der Label-Liste nochmal auf Objekte zuzugreifen
Zitat:
Das wird nicht zufällig freigegeben, bevor du deine TagLabelList leer machst?
Nicht nochmal, sondern vorher ja immer.

Nicht nur der Owner gibt etwas frei, sondern auch der Parent.
Ist ein krankes Verhalten, was die VCL leider von der GDI übernommen hat (dort gibt es keine expliziten Owner, sonden nur einen Parent, der Alles macht),
obwohl es garnicht nötig gewesen wäre, weil die WinControls auch überleben können, selbst wenn das innere HWND und DC noch nicht mehr existiert.


TComponents haben aber ein intenes Notifications-Systen, womit man sich informieren lassen kannt, wenn es freigegeben wird. (das nutzt der Owner, Parent und z.B. eine ComponentList)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Dez 2022 um 17:09 Uhr)
  Mit Zitat antworten Zitat