Hi!
Das irgendein Fenster geschlossen wird, macht ja noch nichts. Erst wenn der Owner freigegeben wird, werden ja die untergeordneten Objekte freigegeben.
Dein Code im Destruktor wird nicht ausgeführt, weil eben der Count der Liste 0 ist (also sich die Komponenten bereits freigegeben haben, TComponentlist aktualisiert sich bei einer Freigabe automatisch).
Wenn ich das jetzt richtig verstanden habe, wunderst du dich, wieso Die Komponenten bereits freigegeben wurden.
Um das mal zu analysieren, setze doch einfach einen Haltepunkt auf den Destruktor einer der Komponenten, und schaue dir bei diesem Breakpoint dann den Aufrufstack an. Da kannst du ja dann wunderbar sehen, welche Aktion zum Freigeben der Komponente geführt hat.
Cu,
Udontknow
Nachtrag: OwnsObjects stammt von TObjectlist; Es beeinflusst nicht das Feld Owner (dies wird ja erst mit TComponent eingeführt!). Wenn OwnsObjects auf True steht, wird beim Zerstören der Liste auch dafür gesorgt, daß die Objekte, die in der Liste sind, verworfen werden. Das gleiche passiert z.B. dann auch durch Clear.
Wenn aber die Objekte bereits freigegeben wurden (z.B. weil die Objekte vom TComponent abstammen und ihr Owner freigegeben wurde), passiert eben nichts damit (zumindest in einer TComponentlist, in einer TObjectlist dürfte es Zugriffsschutzverletzungen geben).