![]() |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Aus welchem Grund?
Das TCollectionItem kennt doch nicht die übergeordnete TCollection. (leider) Und ich weiß auch nicht, warum es schlecht sein soll, seine Eltern zu kennen. |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Wenn ich es richtig verstehe, ist dafür die Methode
![]() |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Damit kann nur die Collection drauf reagieren, wenn etwas in ihr geändert wird.
Die CollectionsItems haben kein Notify. Standardmäßig wissen die Items nicht ob und in welcher Collection sie sich befinden, außer man würde sich selber ein Owner/Parent-Feld in die Items einbauen und dann z.B. im Notify diese Variable setzen. Hatte mal versucht das als generische Objektvorlage umzusetzen, was bei eigenen Deklarationen geht, aber nicht wenn man von den Originaltypen erbt, also wo dann die Collections und Items sich gegenseitig kennen und auch noch die Typen/Property/Parameter richtig gecastet sind. Zwei getrennte Typen ableiten und sich gegenseitig referenzieren zu lassen war mit den Generics aber nicht so leicht möglich, vorallem wenn man sie in der VCL und speziell im FormDesigner und ObjektInspektor haben möchte, wo man dann noch das generische < und > im Namen verstecken muß. |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Wozu brauchen denn die Items ein Notify? Die Collection gibt bei Änderungen Bescheid und benennt dabei das Item und die Art der Änderung. Darauf kann man reagieren und z.B. neu zeichnen.
|
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Zitat:
Es sieht bei mir zur Zeit so aus:
Delphi-Quellcode:
Wenn jetzt z.B. TUrlaubskalender.Eintraege.Add aufgerufen wird, wie bekommt denn die Klasse TUrlaubskalender das mit, denn hier existiert die Methode Paint.
unit tuUrlaubskalender;
TUrlabuskalender = class Property TEintraege: TEintraege; property TEintrastypen: TEintragstypen; propcedure Paint; end; ---- unit tuEintraege; TEintraege = class(TCollection) ... end; TEintrag = class(TCollectionItem) ... end; --- unit tuEintragstypen; TEintragstypen = class(TCollection) ... end; TEintragstyp = class(TCollectionItem) ... end; |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Gut ich könnte in der TUrlaubskalender eine Methode AddEintrag machen, die ihrerseits dann die Add-Mothode der Collection Eintraege aufruft.
Aber macht man das so? Oder gibt es noch den weg rückwärts über irgendeine Benachrichtigung. |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Indem die Collections deine Komponente kennen. Mußt du einbauen, indem du das Notify überschreibst und dort deinem Kalender sagst "du, da hat sich was geändert ... mach ma".
|
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Meinst du so:
Delphi-Quellcode:
dann könnte ich ja im TEintraege.Notify ja self.FParent.Paint aufrufen, oder?Constructor TUrlaubsplan.Create; begin inherited; self.FEintraege:=TEintraege.Create(self); end; //Und im TEitraege ... FParent: TURlaubsplan; . . . constructor TEintreage.Create(Urlaubsplan: TUrlaubsplan); begin inherited; self.FParent:=Urlaubsplan; end; |
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Zitat:
|
AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Wieso kein Event? Dann kann der Urlaubsplan dem einen Handler zuweisen, die Einträge müssen den Urlaubsplan aber gar nicht kennen, sondern führen nur den ggf. zugewiesenen Code aus.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 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