Eigenschaften für Subkomponenten erstellen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Eigenschaften erstellen - Index

Wenn der Wert einer Eigenschaft selbst eine Komponente ist, weisen Sie dieser Eigenschaft üblicherweise einen Wert zu, indem Sie dem Formular oder Datenmodul eine Instanz der anderen Komponente hinzufügen und diese Komponente dann als Eigenschaftswert übergeben. Es ist aber auch möglich, dass Ihre Komponente eine eigene Instanz des Objekts erzeugt, die den Eigenschaftswert implementiert. Eine derartige Komponente wird als Subkomponente bezeichnet.

Jedes persistente Objekt (jeder Nachfolger von TPersistent) kann eine Subkomponente sein. Die published-Eigenschaften einer Subkomponente werden zusammen mit der erzeugenden Komponente gespeichert (für separate Komponenten, die als Eigenschaftswerte zugewiesen werden, ist das nicht der Fall). Dazu müssen allerdings folgende Bedingungen erfüllt sein:

  • Besitzer (Owner) der Subkomponente muss die erzeugende Komponente sein, und sie muss die Subkomponente als Wert einer published-Eigenschaft verwenden. Für Subkomponenten, die von TComponent abgeleitet sind, können Sie das sicherstellen, indem Sie die Eigenschaft Owner der Subkomponente entsprechend einstellen. Für andere Subkomponenten müssen Sie die Methode GetOwner des persistenten Objekts überschreiben, sodass diese die erzeugende Komponente zurückgibt.
  • Ist die Subkomponente von TComponent abgeleitet, muss sie sich durch den Aufruf der Methode SetSubComponent als Subkomponente anmelden. Dieser Aufruf erfolgt entweder bei der Erstellung durch den Besitzer oder durch den Konstruktor der Subkomponente.

Hinweis:  Wenn eine Komponente mit Subkomponenten in den Stream gestellt wird, ist das Flag csLoading der Subkomponenten gesetzt und deren Methode Loaded wird aufgerufen. Dadurch können Komplikationen für schreibbare Eigenschaften von Subkomponenten entstehen. Wenn eine Subkomponenteneigenschaft an eine externe Komponentenreferenz zugewiesen wird, dann können Sie die Subkomponente erst freigeben, wenn die Methode Loaded des Eigentümers aufgerufen wurde. Ansonsten versucht, das Streaming-System die Methode Loaded der Subkomponente aufzurufen, nachdem die Subkomponente freigegeben wurde.

Eigenschaften mit Subkomponenten als Werte sind in der Regel schreibgeschützt. Wenn Sie erlauben, dass eine solche Eigenschaft geändert werden kann, muss der ändernde Code die Subkomponente freigeben, sobald eine andere Komponente als Eigenschaftswert zugewiesen wird. Zudem instantiieren Komponenten ihre Teilkomponenten häufig neu, wenn der Eigenschaft der Wert nil zugewiesen wird. Ansonsten könnte nach der Änderung des Eigenschaftswerts in eine andere Komponente die Teilkomponente zur Entwurfszeit nie wiederhergestellt werden.

Beachten Sie den Aufruf der Methode FreeNotification der Komponente, die als Eigenschaftswert zugewiesen wird. Dieser Aufruf stellt sicher, dass die Komponente vor ihrer Zerstörung eine Meldung sendet, und zwar durch den Aufruf der Notification-Methode. Sie sendet diese Benachrichtigung durch einen Aufruf der Methode Notification. Sie können hierzu die Methode Notification überschreiben.

Siehe auch