Parent übergeben!
-
Hallo!
Ich habe ein kleines Problem!Ich habe mir eine eigene Komponente erstellt. Diese heißt TELAButton und ist von TImage abgeleitet.
Ich möchte jetzt also ein Bild haben, und in dem Vordergrund soll ein Label stehen.
Daher versuche ich im Konstruktor von TELAButton ein Label "Beschriftung" zu erzeugen:__fastcall TELAButton::TELAButton(TComponent* Owner) : TImage(Owner) { Stretch = true; Picture->LoadFromFile("grau_normal.bmp"); Beschriftung->Parent = this; Beschriftung->Left = 2; Beschriftung->Top = 5; Beschriftung->Caption = "Gong 1"; Beschriftung->Show(); }
Wie kann ich dem Label jetzt "sagen", dass TELAButton sein Parent sein soll?
-
Diese Zeile hier macht das doch schon
Beschriftung->Parent = this;
Wo kommt das Label "beschriftung" eigentlich her?
Wäre es nicht vernünftig, es zum Member von TELAButton zu machen und dann in dessen Konstruktor zu erstellen?
-
ja also die klassenvereinbarung ist so (steht in TELAButton1.h):
class PACKAGE TELAButton : public TImage { private: protected: public: TLabel *Beschriftung; __fastcall TELAButton(TComponent* Owner); void __fastcall Status_setzen(String Farbe, String Typ); __published: };
und im header der Unit1 deklariere ich ELAButton1:
class TForm2 : public TForm { __published: // IDE-managed Components void __fastcall FormCreate(TObject *Sender); private: // User declarations TELAButton* ELAButton1; public: // User declarations __fastcall TForm2(TComponent* Owner); };
Und wenn ich das mit
Beschriftung->Parent = this
mache, dann kommt immer die Meldung:
Cannot convert TELAButon* const to TWinControl
-
Hallo
Die Fehlermeldung sagt doch schon alles aus : TImage und damit dein TELAButon ist nicht von TWinControl abgeleitet, deshalb kann es nicht als Parent verwendet werden. Du kannst aber immernoch den Parent von Image nehmen :
// In einer Methode von TELAButton Beschriftung->Parent = Parent
Nachteil : Alle Positionsangaben für Beschriftung beziehen sich nun auf den Parent von TELAButton, nicht auf TELAButton selber.
Ja TImage eignet sich als Container für andere Komponenten. Eventuell solltest du deine Struktur nochmal überdenken.bis bald
akari
-
Hm das gibt dann an genau dieser Stelle eine Access Violation!
Wie kann ich es denn anders lösen, dass ich ein Bild habe, in dessen Vordergrund ein Label steht?
-
Hallo
Die Exception hat nichts mit dem Parent selber zu tun, sondern damit das du auf ungültigen Speicher zugreifst. Über den genauen Grund können hier hier nur raten, aber zum Beispiel ist in deinem Quellcodeausszug nirgends zu sehen, das du eine Instanz für Beschriftung erstellst.
bis bald
akari
-
Oh das hatte ich ganz vergessen im Konstruktor von ELAButton!
Jetzt kommt keine Access Violation mehr, aber wie kann ich jetzt TELAButton als Parent übergeben?
-
Hallo
Hab ich doch schon gesagt : Gar nicht.
bis bald
akari
-
achso...
Kann ich es denn irgendwie machen, dass ich das Label so auf dem TELAButton habe, dass es so ist, wie wenn ich eine Komponente auf ein Panel absetze? ALso dass das Label dann davon abhängig ist?
-
Hallo
Nur indem du dein TELAButton nicht von TImage ableitest, sondern von TPanel.
In dem TPanel erstellst du sowohl ein TImage (Align = alClient) und dein TLabel (als zweites, damit es über dem Image liegt, mit Parent = Panel).
Nun kannst du das Label positionieren in Bezug zu dem Panel. Und da das Image im Hintergrund immer das gesamte Panel ausfüllt, ist das Label gleichzeitig auch zum Image ausgerichtet.bis bald
akari
-
Alles klar!
Vielen Dank!
Sollte es neue Probleme geben melde ich mich noch mal!!
Danke!!!Tim