Komponenten (Images) während der Laufzeit erzeugen und Event (OnClick) zuweisen



  • Hallo alle zusammen...

    Ich hab 12 Images dynamisch mit Hilfe eines Arrays erzeugt und hab allen 12 Image ein und das selbe Bild (durch loadfromfile) zugewiesen. Jetzt möchte ich, dass wenn ich ein Bild anklicke ein anderes Bild (aber je nach Position im Array ein anderes) geladen/angezeigt wird. Ich programmiere mit dem C++ Builder 6.

    Mein code zum erzeugen und Bild laden sieht wie folgt aus:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int j = 0;
    int x = 0;
    for (int i = 1; i <13; i++)
       {
       if (x == 4) x = 0;
       Karte[i].Bild = new TImage(this);
       Karte[i].Bild->Picture->LoadFromFile("karte.bmp");
       Karte[i].Bild->SetBounds(10+134*x,10+134*j,124,124);
       Karte[i].Bild->Parent = this;
       x++;
       if (i % 4 == 0) j++;
       Karte[i].Bild->OnClick = Bildclick;
       }
    }
    

    Ich danke euch schonmal für eure Hilfe!!!

    Muchas Gracias y Saludos



  • papamarco schrieb:

    Ich hab 12 Images dynamisch mit Hilfe eines Arrays erzeugt und hab allen 12 Image ein und das selbe Bild (durch loadfromfile) zugewiesen. Jetzt möchte ich, dass wenn ich ein Bild anklicke ein anderes Bild (aber je nach Position im Array ein anderes) geladen/angezeigt wird.

    gut.. melde dich hier wenn du ne konkrete Frage hast.

    papamarco schrieb:

    Ich danke euch schonmal für eure Hilfe!!!

    Bitte, gerngeschen 🙂

    mfg
    BigNeal



  • Steht doch alles in der FAQ Abschnitt Komponenten benutzen.



  • Braunstein schrieb:

    Steht doch alles in der FAQ Abschnitt Komponenten benutzen.

    Die FAQ hab ich schon gelesen, aber das hilft mir nicht weiter.

    Hatte jetzt folgende Idee:

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    for (int i = 1; i < 13; i++)
       if (Karte[i].Bild->OnClick)
          Karte[i].Bild->Picture->LoadFromFile(IntToStr(i)+".bmp");
    

    Aber er zeigt mir hier jedesmal beim ausführen einen Fehler "Access violation..." an 😡

    Ich will nicht für jedes Bild eine Funktion der Art

    Karte[1].Bild->OnClick = Bildclick1;
    Karte[2].Bild->OnClick = Bildclick2;
    ...
    

    schreiben und dann in jeder Funktion das entsprechende neue Bild laden
    Geht das nicht irgendwie einfacher?(Frage!!!)



  • Dir reicht doch eine OnClick-Funktion, die dann allen Images zuweist. Mit Hilfe dieses FAQ-Eintrages kannst du dann in dieser OnClick-Funktion rausbekommen welches Image angeklickt wurde. Evtl. hilft das hier noch
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-132671.html


Anmelden zum Antworten