Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.939 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: vererbtes Formular - abstrakter Fehler

  Alt 2. Feb 2021, 11:58
Vererben geht, man muß nur einiges Beachten.

* der Formdesigner geht bei Fehlern zu Mammi ... wenn er was nicht erkennt, dann springt er immer auf TForm zurück
* * z.B. wenn die TypInfos in DPR/DPROJ falsch sind -> der {Kommentar} in der der UNIT in der DPR, bzw. der daraus synchronisierte <FORM>-Eintrag in der DPROJ

* im FormDesigner wird bei FormVererbung niemals deine Klasse benutzt
* * selbst dann nicht, wenn du diesen Vorfahren in ein eigenes Package kompilierst und bei Delphi bekannt machst. (RegisterComponent und/oder RegisterClass)

* im DormDesigner wird eine "virtuelle" Klasse generiert und geladen (die heißt zufällig genau wie deine Klasse, aber die RTTI wird dynamisch zusammengebaut)
* * und die RTTI wird auch immer direkt von TForm geerbt, selbst wenn dein Vorfahre mehrere Ebenen hat (weitere Vorfahren zwischen deinem Typ und TForm/TCustomForm)
* * diese RTTI hat nur den gleichen Namen und vermutlich eine Kopie der "published" Felder/Methoden, aber ohne Inhalt/Code

* das ist auch der Grund, warum überschiebene Methoden im FormDesigner nicht aufgerufen werden und warum auch niemals die eigenen Property im ObjektInspektor angezeigt werden.

* das Einzige, was im FormDesigner wirklich "vererbt" wird, sind die DFMs, also es werden erst die Komponenten des/der Vorfahren geladen, aus deren DFMs, und darüber dann die Änderungen aus der DFM der aktuellen Form eingefügt







PS:
* bei vererbten Frames kommt es drauf an, wie die auf der Form liegen
* * als Vererbung über Objektablage reingezogen, bzw. über ProjektManager oder direkt aus der PAS mit dem Frame ... dann ist alles wie bei TForm
* * oder als registrierte Komponente ... hier ist es die echte Klasse und die hat dann auch alle Property im OI und überschriebene Methoden werden ausgeführt (in deinem geladenen Package)


Besonders merkt man sowas, wenn man eine abgeleitete Form hat
und eine eigenen Komponente, welche auf Methoden/Eigenschaften der Form zugreifen will, was im FormDesigner so nie direkt funktionieren kann, da der Owner dort eben eine "andere" Klasse ist ... merkt man auch daran, dass IS/AS hier sagen das passe nicht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Feb 2021 um 12:05 Uhr)
  Mit Zitat antworten Zitat