Parent Eigenschaft einer dynam. Komponente zuweisen



  • Hallo,

    Ich lade verschiedene Komponente dynamisch. Da verschiedene Panel's genutzt werden, stelle ich die Frage:
    Kann ich den Code z.B.

    NewLabel[LabelCount]->Parent = MenuePanel
    

    so ändern, das ich also -> Parent = MenuePanel <- in einer Variable (z.B. Ansistring) übergeben kann.
    Der Sinn dieser Frage ist, ich möchte Code sparen.

    TMultiChildForm::NeueLabel(AnsiString asLabel,
                               int iLeft,
                               int iTop,
                               int iWidth,
                               int iHeight)
    //
    {
    NewLabel.Length++;
    NewLabel[LabelCount] = new TLabel(this);
    NewLabel[LabelCount]->Caption = asLabel;
    NewLabel[LabelCount]->Show();
    NewLabel[LabelCount]->Left = iLeft;
    NewLabel[LabelCount]->Top = iTop;
    NewLabel[LabelCount]->Width = iWidth;
    NewLabel[LabelCount]->Height = iHeight;
    NewLabel[LabelCount]->Parent = MenuePanel;  //  verschieden Panel's
    LabelCount += 1;
    return 0;
    }
    //---------------------------------------------------------------------------
    

    Gruß Siegfried 🙂



  • Hallo,

    Warum übergibst du deiner Funktion nicht einfach einen Pointer auf dein Panel?
    Direkt über einen String geht das nicht. Wenn du es unbedingt über einen String machen willst, liesse sich über TStringList (String in Strings, Panel in Object) oder über eine std::map Instanz lösen. Das halte ich aber für übertrieben und code sparts du damit sicher auch nicht.

    Ciao



  • Hallo,

    habe inzwischen eine Änderung eingefügt, die funktioniert.

    in FormCreate:

    NeueGroupBox("123", 30, 30, 100, 50);
    NeueLabelInGroupBox("Test", (GroupBoxCount-1), 10, 10, 60, 15);
    NeueGroupBox("456", 130, 80, 100, 50);
    NeueLabelInGroupBox("Test", (GroupBoxCount-1), 10, 10, 60, 15);
    

    das Unterprogramm:

    TMultiChildForm::NeueLabelInGroupBox(AnsiString asLabel,
                                         int iGroupBox,
                                         int iLeft,
                                         int iTop,
                                         int iWidth,
                                         int iHeight)
    //
    /
    {
    NewLabel.Length++;
    NewLabel[LabelCount] = new TLabel(this);
    NewLabel[LabelCount]->Caption = asLabel;
    NewLabel[LabelCount]->Left = iLeft;
    NewLabel[LabelCount]->Top = iTop;
    NewLabel[LabelCount]->Width = iWidth;
    NewLabel[LabelCount]->Height = iHeight;
    NewLabel[LabelCount]->Parent = NewGroupBox[iGroupBox];    //MenuePanel;
    NewLabel[LabelCount]->Show();
    LabelCount += 1;
    return 0;
    }
    //---------------------------------------------------------------------------
    

    also, in FormCreate werden innerhalb einer Schleife n Labels erstellt. Die Positionen werden durch Addition angepasst.
    Somit habe ich für das erzeugen des Labels nur dieses eine Unterprogramm.
    oder sehe ich dieses falsch ?

    Gruß Siegfried 🙂



  • Beppo schrieb:

    Hallo,

    Ich lade verschiedene Komponente dynamisch. Da verschiedene Panel's genutzt werden, stelle ich die Frage:
    Kann ich den Code z.B.

    NewLabel[LabelCount]->Parent = MenuePanel
    

    so ändern, das ich also -> Parent = MenuePanel <- in einer Variable (z.B. Ansistring) übergeben kann.
    Der Sinn dieser Frage ist, ich möchte Code sparen.

    Um darauf noch mal zurückzukommen, ja das ist natürlich möglich

    TMultiChildForm::NeueLabel(AnsiString asLabel,
                               int iLeft,
                               int iTop,
                               int iWidth,
                               int iHeight,
                               TPanel *MenuePanel) // Zeiger auf den Parent
    //
    {
    NewLabel.Length++;
    NewLabel[LabelCount] = new TLabel(this);
    NewLabel[LabelCount]->Caption = asLabel;
    // NewLabel[LabelCount]->Show(); nicht nötig, wird durch das Setzen des Parents ausgelöst und ist vorher gar nicht nützlich
    NewLabel[LabelCount]->Left = iLeft;
    NewLabel[LabelCount]->Top = iTop;
    NewLabel[LabelCount]->Width = iWidth;
    NewLabel[LabelCount]->Height = iHeight;
    NewLabel[LabelCount]->Parent = MenuePanel;  //  verschieden Panel's
    LabelCount += 1;
    return 0;
    }
    //---------------------------------------------------------------------------
    

    Somit habe ich für das erzeugen des Labels nur dieses eine Unterprogramm.
    oder sehe ich dieses falsch ?

    Was sollen wir jetzt dazu sagen?!

    bis bald
    akari



  • Hallo,

    Danke für die Korrektur. Ich weiß, daß ich noch viel lernen muß.

    Für die hervorragende Hilfe und Infos der Forumsteilnehmer, vielen Dank.

    Gruß Siegfried 👍 👍 👍


Anmelden zum Antworten