Komponenten benutzen - zur Laufzeit erstellen, anzeigen und Events zuweisen



  • Wie kann ich eine TImage zur laufzeit ertslenn und auf meiner Form anzeigen und positionieren ?? Kann man objekte ertstellen die so heißen test[0] um dem Objekt nen index zu verpassen ??

    [ Dieser Beitrag wurde am 02.07.2003 um 10:25 Uhr von Jansen editiert. ]



  • TImage *image = new TImage(Application);

    image->Parent = Form1;
    image->Width = 123;
    image->Height = 321;

    usw... gugg mal unter TImage in die hilfe...



  • Du kannst immer auch ein Array von Komponenten erzeugen, auf dessen Elemente sich dann per Index zugreifen lässt:

    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;
      ...
      img[i]->Show();
      img[i]->Canvas->Brush->Color = clWhite; // nur zum Test
    }
    

    [ Dieser Beitrag wurde am 11.07.2002 um 09:39 Uhr von Jansen editiert. ]



  • Wie kann ich denn solchen, zur laufzeit erzeugten objecten ein event zuweisen ?? zb. wenn ich klicke, das ich dann den Tag von alktuellen object als msgbox bekomme ??



  • Indem du z.B. bei einem button OnClick die Einsprungadresse zuweist:

    Button1->OnClick = OnButton1Click;

    wobei irgendwo da steht:

    void __fastcall TForm1::OnButton1Click(TObject *Sender)
    {
    ...
    }

    -junix



  • und was ist wenn ich allen das gleiche event zuweisen will ??



  • Aha, also nimmst du doch meine Lösung aus dem anderen Thread *stolzbin*.

    Also wenn du ALLEN TImages auf der Form dasselbe Event zuweisen willst, geht das so:

    void __fastcall TForm1::Image1Click(TObject *Sender)
    {
        ShowMessage("test");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        TComponent *comp;
    
        for(int i=0;i<this->ComponentCount;i++)
        {
            comp = this->Components[i];
            AnsiString aClass = comp->ClassName();
            if(aClass=="TImage")
            {
                TImage *img = ((TImage *)(comp));
                img->OnClick = Image1Click;
            }
        }
    }
    

    MfG
    LD



  • hi,
    um da mal Jansens Beispiel mal etwas zu erweitern:

    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;
    img[i]->OnClick=Image1Click;
      ...
      img[i]->Show();
      img[i]->Canvas->Brush->Color = clWhite; // nur zum Test
    }
    

    und dann Little.Daves:

    void __fastcall TForm1::Image1Click(TObject *Sender)
    {
        ShowMessage("test");
    }
    //---------------------------------------------------------------------------
    

    ist ein wenig einfacher.
    Ansonsten würde ich immer dynamic_cast vorziehen



  • danke leute habt mir echt gehofen.
    *selbstnixkönnneidischsei*


Anmelden zum Antworten