Zero5 hat folgendes geschrieben: |
Hab´s jetzt so gemacht, und es funktioniert ! |
Wie denn? Wie ich es beschrieben hatte?
Zero5 hat folgendes geschrieben: |
Mir ist nur noch nicht ganz klar, für was ich nun den owner brauch, bisher wird der nur in dem Feld Fowner gespeichert. |
Mache in deiner Klasse TXXX ...
Delphi-Quelltext
1: 2:
| public property Owner:TID3 read FOwner; |
... und du kannst jederzeit über XXXComment.Owner abfragen, zu welcher Instanz von TID3 es gehört, bzw. darüber auf die Instanz von TID3 zugreifen. Dein Programm könnte ja mehrere Komponenten vom Typ TXXX behandeln. Zu was anderem als der Klärung des Eigentümers bzw. des Zugriffes auf ihn ist Owner in
diesem Falle nicht gut.
Aber mal ein Beispiel, wo es interessanter ist:
Wenn dein TID3 und TXXX von TComponent (oder Nachfahren davon) abgeleitet wären
und der Constructor von TXXX ein "inherited Create(Owner);" enthalten würde, so würde schlussendlich auch der Constructor von TComponent ausgeführt werden, welcher wiederum z.B. die Instanz von TXXX in die Komponentenliste (Eigenschaft Components) des Owners eintragen würde. Solche Mechanismen sind dann z.B. interessant, wenn eine Komponente seine Unterkomponenten kennen muss.
Das scheint bei dir aber nicht der Fall zu sein, weil deine Ableitung von TID3 weiter oben bei TPerstistent ansetzt und deinem TID3 (welche kaum als "Komponente" zu bezeichnen ist) dadurch die Eigenschaft Components fehlt. Davon (Ableitung von TPersistent) rät die Online-Hilfe im übrigen ab!
Zero5 hat folgendes geschrieben: |
Was passiert bei der Freigabe von TID3, wird das das TXXX Objekt mit freigegeben (automatisch über den owner), oder muss ich das dem explizit sagen ? |
Meines Wissens kann die automatische Freigabe nur geschehen, wenn - wie auch oben beschrieben - beide von TComponent (oder Nachfahren) abgeleitet sind. TListView hat in seinem Destructor auch eine expliziete Freigabe seiner Eigenschaft Items (Typ TListItems) eingebaut, weil TListItems kein Nachfahre von TComponent ist.
In deinem Falle müsste wohl ebenfalls auch der Destructor von TID3 overrided werden und dort ein FXXXComment.Free drin auftauchen.