herausfinden auf welches TImage geklickt wurde



  • hallo,

    ich habe ein kleines problem. ich habe auf einem spielfeld mehrere TImages platziert. wie kann ich nun abfragen auf welches der vielen doppelgeklickt wurde und wie dessen name ist?

    /*******************************************************************************
    * Drehen der Dreiecke
    */
    void __fastcall TKomponenten::imgDreieckDoubleClick(TObject *Sender)
    {
            if(m_anzDreiecke >= 1)
            {
                    switch(m_anzDrehungenDreieck)
                    {
                            case 0:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck01.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 1:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck02.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 2:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck04.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 3:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck03.bmp");
                                    m_anzDrehungenDreieck = 0;
                                    break;
                            default:
                                    break;
                    }
            }
    }
    
    /*******************************************************************************
    *
    */
    void __fastcall TKomponenten::imgDreieckMouseUp(TObject *Sender,
                    TMouseButton Button, TShiftState Shift, int x, int y)
    {
            if(m_anzDreiecke >= 1)
            {
                    if(dreiecke[m_momentaneDreiecke]->Left + 20 > m_left && y < m_form->Width - 20)
                    {
                            dreiecke[m_momentaneDreiecke]->Top = m_top + 45;
                            dreiecke[m_momentaneDreiecke]->Left = m_poslblAnzDreiecke;
                    }
                    else
                    {
                            m_momentaneDreiecke++;
                            m_anzDreiecke--;
    
                            if(m_anzDreiecke >= 0 && m_noMoreDreieckeLeft == false)
                            {
                                    //Neues Dreieck malen
                                    dreiecke[m_momentaneDreiecke] = new TImage(m_form);
                                    dreiecke[m_momentaneDreiecke]->Parent = m_form;
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->LoadFromFile("Dreieck01.bmp");
                                    dreiecke[m_momentaneDreiecke]->Top = m_top + 45;
    
                                    switch(m_anzDreieckeDez)
                                    {
                                            case 1:
                                                    m_poslblAnzDreiecke = lblAnzDreiecke->Left + 20;
                                                    break;
                                            case 2:
                                                    m_poslblAnzDreiecke = lblAnzDreiecke->Left + 25;
                                                    break;
                                            default:
                                                    break;
                                    }
    
                                    dreiecke[m_momentaneDreiecke]->Left = m_poslblAnzDreiecke;
                                    dreiecke[m_momentaneDreiecke]->AutoSize = true;
                                    dreiecke[m_momentaneDreiecke]->Transparent = true;
                                    dreiecke[m_momentaneDreiecke]->OnMouseDown = imgDreieckMouseDown;
                                    dreiecke[m_momentaneDreiecke]->OnMouseMove = imgDreieckMouseMove;
                                    dreiecke[m_momentaneDreiecke]->OnMouseUp = imgDreieckMouseUp;
                                    dreiecke[m_momentaneDreiecke]->OnDblClick = imgDreieckDoubleClick;
                                    dreiecke[m_momentaneDreiecke]->AutoSize = true;
    
                                    lblAnzDreiecke->Caption = (AnsiString)m_anzDreiecke;
    
                                    m_gesPunktezahl = m_gesPunktezahl - m_kostenDreieck;
                                    lblPunktestand->Caption = "Punkte: " + (AnsiString)m_gesPunktezahl;
                            }
                    }
    
                    m_Dyn = 0;
            }
            else
            {
                    m_noMoreDreieckeLeft = true;
            }
    }
    

    im moment wird immer eins hochgezählt bei mouseup. d.H: wenn ich ein dreieck auf dem feld platziere wird automatisch ein neues TImage erzeugt welches dann praktisch für m_momentaneDreiecke steht.

    ich mag aber das drehen auf welches ich wirklich doppelklicke.

    gruesse rene



  • Hallo

    schau dir in der BCB-FAQ hier im Forum die Themen im Abschnitt Komnponenten benutzen an.

    bis bald
    akari



  • hab ich nun, nur leider werde ich daraus net viel schlauer 😞

    gruesse rene





  • kleiner versuch:

    TImage *hilfsImage = dynamic_cast<TImage*> (Sender);
            if(hilfsImage)
            {
    	        String test=hilfsImage->Name;
                    lblPunktestand->Caption = test;
            }
    

    result NULL. hmmm, ..... ahso hab kein name gesetzt 🙂

    gruesse rene



  • Hallo

    da dein zuletzt geposteter Quellcode für sich genommen korrekt ist, liegt das Problem woanders.

    bis bald
    akari



  • ich hatte kein name gesetzt. jetzt häng ich aber schon wieder. der name bringt mir ja nix. ich brauch da den index des jeweiligen TImages aus meinem array.

    /*******************************************************************************
    * Drehen der Dreiecke
    */
    void __fastcall TKomponenten::imgDreieckDoubleClick(TObject *Sender)
    {
            TImage *hilfsImage = dynamic_cast<TImage*> (Sender);
            if(hilfsImage)
            {
    	        m_nameDreieck = hilfsImage->Name;
            }
    
            if(m_anzDreiecke >= 1)
            {
                    switch(m_anzDrehungenDreieck)
                    {
                            case 0:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck01.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 1:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck02.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 2:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck04.bmp");
                                    m_anzDrehungenDreieck++;
                                    break;
                            case 3:
                                    dreiecke[m_momentaneDreiecke]->Picture->Bitmap->
                                    LoadFromFile("Bilder\\Dreieck03.bmp");
                                    m_anzDrehungenDreieck = 0;
                                    break;
                            default:
                                    break;
                    }
            }
    }
    

    ich brauh den richtigen wert in m_momentaneDreiecke.

    gruesse rene



  • Da du ja auch den Namen nicht setzt - jedenfalls in dem hier gezeigten Code - kann logischerweise auch keiner da sein.

    Setze den Index in das TAG Attribut und lese dann diesen aus



  • Hallo

    schreib den Index des Images beim Erstellen in die Tag-Eigenschaft, dann kannst du diese auch wieder im Event nach dem casten auslesen,

    bis bald
    akari



  • tag war die lösung. juhu.

    danke

    gruesse rene


Anmelden zum Antworten