Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Frame Vererbung (https://www.delphipraxis.net/217246-frame-vererbung.html)

TurboMagic 28. Mai 2025 22:04

Frame Vererbung
 
Hallo,

ich bastle gerade was mit Frames und Vererbung.
Zuerst dachte ich, dass alles passt, bis ich die IDE neu starten musste.
Beim Laden des Projektes gab es genau für diese Frames Gemecker, es
compiliert aber und läuft wie gewünscht.

Nur wie das Gemecker abstellen?

Was hab' ich gemacht?

1. Einen Basis Frame designed, der einen bestimmten Mechanismus umsetzt

2. Ein paar bereits existierende Frames darauf umgebaut wie folgt:

3. Jeweils die Unit des Basis Frames in interface uses aufgenommen

4. Im jeweils existierenden Frame nicht mehr von TFrame geerbt

5. Und dort jeweils das im Basis Frame schon implementierte CreateParams
überschrieben.

Beim Laden des Projekts kommt jetzt immer:
Fehler beim Lesen von frm_MyFrame.TabOrder: Eigenschaft TabOrder existiert nicht...

himitsu 28. Mai 2025 23:03

AW: Frame Vererbung
 
Wenn der Formdesigner nicht klar kommt, dann spingt er immer auf TForm als Vererbungsbasis zurück.
Bei vererbten Forms fehlt dann alles vom Vorfahren und bei Frames versucht es halt die Frame-DFM über eine TForm zu zerrren, anstatt einen TFrame.

Zur Laufzeit ist es egal, da die Klassenvererbung den Ton angibt (RTTI/TypeInfo),
aber im FormDesigner wird halt eine generische Basisform genommen (direkt TForm oder TFrame), wenn der Vorfahre aber in der IDE registriert ist und die Config (DPROJ) passt, dann kann es auch der echte Vorfahre sein.

In der DPROJ sollte es zur Unit einen Type-Unterknoten geben, ob der Vorfahre (hier "Frame") drin steht.

Entferne mal die Unit aus dem Projekt (im ProjekManager) und füge sie dann neu hinzu.
In der DPROJ sollte dann hoffenlitch das wider richtig eingefügt sein.
In der DPR sollte aber vorher auch der USES-Import
Delphi-Quellcode:
unitname IN 'dateipfad' {variablenname}
ordentlich drinstehn.

Uwe Raabe 28. Mai 2025 23:46

AW: Frame Vererbung
 
Zitat:

Zitat von himitsu (Beitrag 1549105)
In der DPR sollte aber vorher auch der USES-Import
Delphi-Quellcode:
unitname IN 'dateipfad' {variablenname}
ordentlich drinstehn.

Bei einem Frame sieht das geringfügig anders aus:
Delphi-Quellcode:
unitname IN 'dateipfad' {variablenname: TFrame}

TurboMagic 29. Mai 2025 10:12

AW: Frame Vererbung
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1549106)
Zitat:

Zitat von himitsu (Beitrag 1549105)
In der DPR sollte aber vorher auch der USES-Import
Delphi-Quellcode:
unitname IN 'dateipfad' {variablenname}
ordentlich drinstehn.

Bei einem Frame sieht das geringfügig anders aus:
Delphi-Quellcode:
unitname IN 'dateipfad' {variablenname: TFrame}

Danke auch mal dafür, eben nachgeschaut und bei einem Frame war der Variablenname noch falsch Frame1 oder so.
Jetzt muss ich aber Himitsu's Lösungsansatz probieren, da das den Fehler noch nicht wirklich beseitigt hat.

TurboMagic 29. Mai 2025 10:17

AW: Frame Vererbung
 
Nix gut...
Habe alle diese Frames mal entfernt und neu hinzugefügt.
Es kommt für jeden die Fehlermeldung mit dem TabOrder und in der DRP fehlt dann meistens alles in { } dahinter
oder in einem Fall hat die IDE Frame1 dort rein geschrieben, was aber definitiv dwer falsche Name ist.

peterbelow 29. Mai 2025 12:05

AW: Frame Vererbung
 
Zitat:

Zitat von TurboMagic (Beitrag 1549108)
Nix gut...
Habe alle diese Frames mal entfernt und neu hinzugefügt.
Es kommt für jeden die Fehlermeldung mit dem TabOrder und in der DRP fehlt dann meistens alles in { } dahinter
oder in einem Fall hat die IDE Frame1 dort rein geschrieben, was aber definitiv dwer falsche Name ist.

Hast Du mal die dfm-Files der betroffenen Frames kontrolliert? Sie müssen mit "inherited" anfangen, nicht mit "object". Das wird oft vergessen zu ändern wenn man frames, forms, datamodules im Code-Editor auf einen anderen Vorfahren umbiegt...

TurboMagic 29. Mai 2025 13:11

AW: Frame Vererbung
 
Hallo,

danke das muss ich vermutlich tun.

Nur welche müssen alle auf inherited? Nur die, die direkt von meinem Basis-Frame
erben oder auch mein Basisframe, welches von TFrame abstammt?

TurboMagic 29. Mai 2025 13:20

AW: Frame Vererbung
 
Hallo,

so, jetzt wirklich alle nochmal raus, in den dfms inherited statt object reingeschrieben
und nochmal rein. Nun lädt es ohne Fehler!

Danke an alle!

Uwe Raabe 29. Mai 2025 15:11

AW: Frame Vererbung
 
Dann hast du die vererbten Frames offenbar nicht korrekt erstellt: Im Menü Datei -> Neu - Weitere -> Delphi-Projekte -> Vererbbare Elemente und dort den Basis-Frame auswählen und auf OK klicken.

TurboMagic 29. Mai 2025 16:42

AW: Frame Vererbung
 
Hallo,

ja Uwe, du hast mich ertappt!
Das hatte ich nämlich nicht gewußt, dass das so geht.

Jetzt klappt's aber. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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