Dynamisch erstellte Komponente ansprechen



  • hahahahahahah!

    Beim Compelieren schreibt kriege ich einen Fehler!

    Undefined Symbol And
    

    😮 😕 😮 😕 😮 😕

    Das ist doch ein scherz oder??



  • ach so!

    das hat deswegen funktioniert, weil du alles in einer Schleife machst.

    ich muss es in einer anderen Schleife machen!!

    sprich

    void __fastcall TLogicWin::ElementAND (int X, int Y)
    {
    // komponnete erstellen
    }
    void __fastcall TLogicWin::schreibe (int X, int Y)
    {
    // dynamische komponente ansprechen
    }



  • Ich glaub zu dem Code muss ich nicht mehr viel sagen oder ?

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    int GetCount(TForm1 *FormPtr, TImage *ImgPtr);
    void CreateObj(TForm1 *FormPtr);
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
       CreateObj(this);
    }
    
    //---------------------------------------------------------------------------
    int GetCount(TForm1 *FormPtr, TImage *ImgPtr){
        int Counted = FormPtr->ComponentCount+(ImgPtr->ComponentCount);
        return Counted;
    }
    //---------------------------------------------------------------------------
    void CreateObj(TForm1 *FormPtr){
        TImage *And = new TImage(FormPtr);
        And->Parent = FormPtr;
    
        And->Transparent = FormPtr;
        And->Height = 50;
        And->Width = 97;
        And->Name = "AND_1";
    
        //Graphik
        And->Canvas->Pen->Color = clBlack;
        And->Canvas->Brush->Color = clWhite;
        And->Canvas->Rectangle(20, 20, 20 + 50, 20 + 50);
    
        //Eigenschaften
        TLabel * newLabel1 = new TLabel(And);
        newLabel1->Left = 20 - 30;
        newLabel1->Top = 20 - 10;
        newLabel1->Caption = "In1";
        newLabel1->Name = "AND_In1_1";
        newLabel1->Font->Name = "Courier New";
        newLabel1->Parent = FormPtr;
        newLabel1->Transparent = true;
    
        //Eigenschaften
        TLabel * newLabel2 = new TLabel(And);
        newLabel2->Left = 20 - 30;
        newLabel2->Top = 20 - 10;
        newLabel2->Caption = "In1";
        newLabel2->Name = "AND_In1_2";
        newLabel2->Font->Name = "Courier New";
        newLabel2->Parent = FormPtr;
        newLabel2->Transparent = FormPtr;
        FormPtr->Label1->Caption = IntToStr(GetCount(Form1,And));
    }
    

    Ich hoffe damit kommst du der Lösung deines Problems näher !

    😃 Greez Pixtar



  • ich scahaue den den Code später an! Frau ruft!! 😃

    Falls was melde ich mich später!!



  • Pixtar:
    Ich meine den von akari angesprochenen FAQ-Eintrag zu dynamischen Arrays.



  • Hi Pixtar,

    Also wie gesagt dein Code funktioniert nicht so wie ich es brauche. Bei dir geschieht alles während deine Komponente erstellt wird. Beim Erstellen wird bei dir eine Funktion aufgerufen, die die Komponente zählt.

    Bloß es ist nicht das was ich brauche.

    Da ich erst einmal sagen wir mal 5 "And" Komponente erstelle und dann einen Knopf drücke, der mir alle Komponente, auch die TLabels die auf "And" liegen, in mein RichEdit bzw. Memo reinschreiben soll.

    Kann mir da vielleicht jemand helfen??



  • Hallo

    Irgendwie verstehe ich dein Problem nicht. Insbesondere sehe ich keinen Sinn die Labels mit Owner = Image und Parent = Form zu erstellen. Was erhoffst du dir davon?

    bis bald
    akari



  • @akari
    stell dir mal ein AND-Glied vor. Er hat 2 Eingänge und 1 Ausgang. Durch die diese TLabels werden die Eingänge und Ausgang benannt. Das AND-Glied muss auf der Form verschiebbar sein und TLabels (Caption) müssen veränderbar sein.
    Dafür muss ich diese TLabels ansprechen können, um die Tlabels zu ändern.

    Mir ist keine andere Lösung eingefallen, daher habe ich das so gemacht.

    Ich weis wie ich diese TLabels (Caption) verändern kann, wenn ich auf diese Tlabels oder TImage drücke, was auch funktioniert.
    Im nächsten Schritt muss ich alle TLabels, die sich bei mir auf dem TImage befinden, ansprechen und in TRichEdit bzw TMemo auflisten.

    Natürlich gibt es eine andere Möglichkeit die Tlabels in TRichEdit bzw. TMemo reinzuschreiben. Z.B. bei der Erstellung dieser TLabels. Bloß mein Prof. verlangt, das ich diese so anspreche, wie oben es beschrieben ist.

    Gruß
    swunder



  • Hallo

    Das ist ja schön und gut, aber trotzdem ergibt die besagte Belegung von Owner und Parent keinen Sinn. Also zitier ich doch die BCB-Hilfe :
    - Owner gibt an welcher Container für die Speicherverwaltung der Komponente zuständig ist. Dabei wird das Control in das Array Components des Owners eingetragen und ist darüber iterierbar.
    - Parent gibt an in welchem Container das Control angezeigt werden soll.

    Wenn du also sowohl Owner als auch Parent der Labels auf das Image setzt, kannst du alle Labels (und nur diese Labels) über Components des Images iterieren.

    bis bald
    akari



  • @akari
    Also irgendwie komme ich nicht ganz dahinter, was du mir damit sagen möchtest!
    Wie würdest du den mein Problem Lösen bzw. die Komponente mit TLabels erstellen?

    😕 gruß



  • Meinst du das ich die Komponente so erstellen soll!

    const int x = 10; 
    TImage *img[x]; 
    
    for (int i = 0; i < x; i++) 
    { 
      img[i] = new TImage(this); 
      img[i]->Parent = this; 
      img[i]->Width = 32; 
      img[i]->Height = 32; 
      img[i]->Top = i * 35; 
    
       TLabel * newLabel1 = new TLabel(And);
       newLabel1->Left = 20 - 30;
       newLabel1->Top = 20 - 10;
       newLabel1->Caption = "In1";
       newLabel1->Name = "AND_In1_1";
       newLabel1->Font->Name = "Courier New";
       newLabel1->Parent = FormPtr;
       newLabel1->Transparent = true;
    
    }
    

    und dann so ansprechen soll!

    for (int ii = 0; ii < x; ii++) 
    { 
    Form2->RichEdit1->Lines->Add[Form1->img[ii]->newLabel1->Name];
    }
    

    Wird es gehen? Kann leider nicht ausprobieren, da ich auf der Arbeit bin.



  • Unqualifizierte Zwischenfrage: Wird das eine Diplomarbeit? AND-Glieder benennen, verschieben, auflisten... liest sich wie ein kleiner, selbstgeschriebener Editor für einfache Digitalschaltungen... das interessiert mich! 😮



  • Das ist keine Diplomarbeit.
    Einfach Freizeit Projekt, damit erlerne ich Builder C++.
    Aber alles andere stimmt.
    Bin so gesehen fast fertig! Fehlt bloß diese blöde Geschichte und paar Feineinstellungen?

    Help!!!!!



  • Coole Idee! Darf man das dann evtl mal testen wenns fertig ist?



  • warum nicht!!



  • 2 Login's? Oder hab ich da was falsch interpretiert?

    Sagst Bescheid, wenn's testbereit ist? Ich schicke dir dann meine mail-adresse per mail über dein Profil hier! 😉



  • ja du hast es falsch interpretiert!!!
    Aber ich hätte trotzdem nichts dagegen!

    @hw_sw
    ??? 😕 ???



  • Hallo

    hw_sw hat alle 4 Posts von einer IP gemacht von der auch swunder aus postet...

    Zum Thema : Niemand hier im Forum hat noch einen Überblick wie der Stand ist. Wenn du also noch eine offene Frage hast dann solltest du den Stand nochmal zusammenfassen und formulieren.

    bis bald
    akari



  • akari schrieb:

    hw_sw hat alle 4 Posts von einer IP gemacht von der auch swunder aus postet...

    Aha, zwei Kollegen am selben Router (und das ist die harmlose Variante!) 🕶

    Edit: Oder swunder is nich ganz allein 🤡 😃 🤡 (nur Spaß!)


Anmelden zum Antworten