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]