[gelöst] Frames vererben - Probleme mit grafischen Elemente

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

[gelöst] Frames vererben - Probleme mit grafischen Elemente

Beitrag von charlytango »

Hi,

Nachdem ich jetzt vermehrt Frames einsetze stellt sich die Herausforderung nach einem gemeinsamen Vorfahren zu mehreren Frames.
Also ein Vorfahren-Frame erstellen --> TFrameSelektionParent
dann darin ein Popupmenü erstellt; Name= PopupMenuParent

Danach dem Tframeselektionstandard im Source (bei der Klassendefinition) statt TFrame den neuen Vorfahren TFrameSelektionParent eintragen.

Und das kommt dabei raus:

Code: Alles auswählen

frameselektionstandard.pas(96,5) Error: Duplicate identifier "PopupMenuParent"
frameselektionstandard.pas(96,20) Hint: Identifier already defined in unit FRAMESELEKTIONPARENT: 
Irgendwie scheint da die Hierarchie durcheinander zu kommen.

Gibt es da eine Best Practice wie man im Nachhinein grafische Elemente korrekt neu vererbt/ableitet?

Oder muss ich das alles nochmal neu machen und in der richtigen Reihenfolge der Hierarchie erstellen?
Zuletzt geändert von charlytango am Fr 16. Sep 2022, 11:59, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Frames vererben - Probleme mit grafischen Elemente

Beitrag von af0815 »

Irgendwie ist da was schiefgelaufen. Such mal mit einem Texteditor woher der doppelte Identfier kommt. Wenn du im Child schon mal das PopUpMenü drinnen gehabt hast, so ist es klar warum es doppelt ist.

Ich arbeite extrem viel mit vererbten Frames und Forms und kenne das nur wenn ich blöderweise wo die Namen gleich gehalten habe. Und immer die pas und die lfm Kontrollieren und synchron halten. Wenn du händisch auf Vererbung umstellst, so empfehle ich einmal eine Vererbung über Lazarus zu machen und das lfm auch ansehen, was dort anders ist, gegenüber einem normalen Frame oder Form. Bei dem Basisframe steht object drinnen, beim vererbten dann inherited. Das darf man nicht übersehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Frames vererben - Probleme mit grafischen Elemente

Beitrag von charlytango »

ich habe aus dem Kind-Frame im Source aus der Klassen-Deklaration die Zeile
PopupMenuParent1: TPopupMenu;
gelöscht. Danach ließ es sich kompilieren.

In dem .lfm Dateien waren die korrekten Einträge mit "inherited" gekennzeichnet.

Ganz verstehe ich das trotzdem nicht, denn die Deklaration PopupMenuParent1: TPopupMenu; wurde offensichtlich automatisch eingefügt.
Grübel, grübel.

Wenn ich mich erinnere hatte ich auch schon unter Delphi immer wieder mal Problem wenn ich einem fertigen Form einen Vorfahren verpassen wollte.
Sind keine Grafischen Objekte auf der Form oder werden die im Source erzeugt klappt das Problemlos, wenn auf der Form irgend etwas draufklebt ist die Chance da, dass es schief geht.
Andersrum scheint es zu klappen -- also wenn das Eltern-Form vorher existiert und mittels GUI abgeleitet wird.

Es funktioniert, ganz glücklich bin ich damit nicht weil ich es nicht ganz verstehe :-(

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [gelöst] Frames vererben - Probleme mit grafischen Elemente

Beitrag von af0815 »

Ist das Frame irgendwo statisch (zur Designzeit) eingebaut ?! Weil dann reicht ein kleiner Klick dort hinein, um in Kind eine abgeleitet Komponente zu erzeugen. Das ist der Grund, das ich Frames nur dynamisch zur Laufzeit einbinde. Damit kann ich auch die Frames so designen, das die alles beinhalten und nur über definierte Schnittstellen kommunizieren. Damit habe ich fertige Module, die ich in den Apps beliebig einbinden kann und zwar ohne Seiteneffekte befürchten zu müssen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [gelöst] Frames vererben - Probleme mit grafischen Elemente

Beitrag von charlytango »

af0815 hat geschrieben:
Fr 16. Sep 2022, 13:11
Ist das Frame irgendwo statisch (zur Designzeit) eingebaut ?!
oh nein, die Frames existieren zur Designzeit nur als Frames an sich und werden zur Laufzeit zb in ein TPageControl eingebaut.
Bevor ich damit überhaupt begonnen habe, habe ich etliche Monate bei deinen Posts mitgelesen 8)

Und davor hab ich ähnliches schon mit kompletten Forms gemacht. Ganz hat sich mir der Vorteil der Frames zu einem Form nicht erschlossen, denn beide lassen sich als Instanzen beliebig in andere Strukturen "einkleben". Nur hat das Form schon Events (zb OnCreate etc) die man in einem Frame ggfs nachbauen muss

Antworten