Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

Re: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 25. Aug 2006, 15:02
Zitat von Hansa:
Eine Basisfunktionalität in seine Formulare einzubauen ist der Sinn der Objektablage.
Wenn Du die Objektablage verwendest, und beim Einfügen nicht "kopieren" oder "verwenden" sondern "Vererben" anklickst, machst Du genau das selbe wie ich hier im Beispiel.
Deine DFM-Dateien sehen genau so aus.
Sicherlich werden die Basisformulare in die Objektablage kommen, aber wenn dort ein TActionManager enthalten ist, kann man auch nicht vererben!!!
Das ist die selbe Technologie.
Diese verwenden wir ja auch schon einige Jahre
Ich habe es im Beispiel nur ohne die Objektablage gemacht um es nicht unnötig zu komplizieren.

Zitat von Hansa:
Man kann das zwar auch von Hand erledigen (wie hier), aber das ist nicht zu empfehlen wegen zu vieler Quereffekte. Denn : wird es richtig gemacht, so muss man nicht nur die DPR/PAS ändern, sondern auch die DFMs und anderes. Wenn ich ein Formular vererben will, dann sieht das so aus ...
Welche Quereffekte?
Es wird doch die selbe Technologie verwendet.
Die Änderungen an den DFM Dateien macht die Delphi IDE doch von selbst.

Das Kopieren oder Verwenden in der Objektablage umgeht zwar das Problem, aber ich verliere dann auch die Möglichkeiten.

Ich will ein SDI- sowie ein MDI-Basisformular haben, das in allen Applikationen verwendet werden kann.
Änderungen am Basisformular sollen sich direkt auch auf die abgeleiteten Formulare auswirken (beim nächsten kompilieren).
Ich möchte ein MDI Child Basisformular haben, das von allen MDI-Applikationen verwendet wird.
In dem MDI Child sind auch abstrakte Methoden enthalten, die in der Applikation implementiert werden müssen.
z.B. procedure TMDIChild.SaveData;
Wenn im Menü Speichern gedrückt wird, wird automatisch SaveData des MDI Fensters aufgerufen.
Außerdem möchten wir bestimmte Merkmale in den MDI Child Fenstern über Interfaces realisieren, um sie im Framework besser ansprechen zu können.

Das klappt auch soweit sehr gut. Und ist wie gesagt schon seit Jahren hier im Einsatz.

Die Applikation soll nun eine neue Optik bekommen und so werden gerade die Basisformulare angepasst.

ABER es kann z.B. kein TActionManager verwendet werden.
Egal ob mit oder ohne Objektablage.

Zitat von Hansa:
Das Panel "pnlOben" ist mit allen Eigenschaften vom Vorfahr-Formular geerbt. Die Checkbox darauf wurde erst jetzt mit diesem Formular eingeführt. Vererbe ich es weiter, so stehen in der DFM nur noch die geänderten Sachen drin. Soll nun irgendwo die Vererbung unterbrochen werden, so könnte es eventuell schon genügen ein inherited wegzulassen. Ein Blick in die DFM eines Formulars, das nicht mehr vererbt werden kann sollte das klären. Oder mal dasselbe Form per Objektablage vererben und nicht von Hand. Da sind sicherlich Unterschiede zu bemerken.
Das ist doch normal bei der Objektorientierten Programmierung.
Du kannst ja auch nicht die Vererbungskette von Objekten trennen.
Wie willst Du das denn machen. Die DFM-Datei ist ja nur eine Resource, die in die Unit mit {$R *.dfm} eingebunden wird.
Die IDE sorgt im Normalfall dafür, das immer das Richtige drinnsteht.

Warum sollte also die Vererbung unterbrochen werden?

Ich versteh Dein Problem nicht.


Aber danke für den Hinweis


[edit]@all:
ps: bitte in diesem Thread keine Diskussion über den Sinn und Zweck von Interfaces und abstrakten Methoden führen, dafür gibt es schon andere Threads
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat