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