Dynamische Images / Events



  • Hallo.

    Hab schon einbißchen im Forum gestöbert, aber leider keine passende Anwort gefunden.

    Also, ich lege ein dynamischer Array mit Images an und lege auch ein OnClick Event auf diese Images fest.

    Wenn ich nun auf eines dieser Images klicke funktioniert das Event auch, aber ich möchte gerne feststelle auf welches Image ich geklickt habe. Wie geht das?

    Desweiteren würde mich interessieren wie für jedes Image im dynamischen Array ein Event zuweise?

    Einbißchen Theoretisch meine Frage, ich hoffe Sie ist trotzdem verständlich.

    Danke!

    Gruß

    KMB



  • Hallo

    Wenn ich nun auf eines dieser Images klicke funktioniert das Event auch, aber ich möchte gerne feststelle auf welches Image ich geklickt habe. Wie geht das? ...
    Desweiteren würde mich interessieren wie für jedes Image im dynamischen Array ein Event zuweise?

    Siehe BCB_FAQ hier im Forum, Abschnitt Komponenten benutzen. Mehrere themen dort beschäftigen sich damit.

    bis bald
    akari



  • Naja, hab ich mir zur genüge angeguckt. Aber richtig geholfen haben mir die Beiträge für diesen Fall nicht.



  • Was hast du denn nicht verstanden?



  • Hallo

    was genau verstehst du nicht? Wie sieht dein jetztiger Quellcode aus?
    Um genau deine zwei Fragen zu klären :

    // Eventmehtode für dynamische Images, muß auch im Header des Forms in der Klasse definiert werden
    void __fastcall TForm1::OnDynImageClick(TObject *Sender)
    {
      TImage *CurImage = dynamic_cast<TImage *> (Sender); // Sender als das aufrufende Image betrachten
      if (CurImage == NULL) return; // Wenn Sender kein Image, abbrechen
      ShowMessage(AnsiString("OnDynImageClick für ") + CurImage->Name);
      }
    
    ...
    
    // In einer Methode von TForm1
    MyDynArray[0]->OnClick = OnDynImageClick; // Event zuweisen
    

    /Edit : Überprüfung im Event hinzugefügt.

    bis bald
    akari



  • Ersteinmal danke für eure Antworten.

    Also, folgendes. In deinem Bsp.: hast du ja geschrieben:

    // In einer Methode von TForm1
    MyDynArray[0]->OnClick = OnDynImageClick; // Event zuweisen
    

    Also wenn man nun eine For-Schleife für die Erstellung schreiben würde:

    for (int i3 = 0; i3 < 7 && aktIMG < imgNum; i3++)   //IMG Zeichnung
                    {
                    imgArray[aktIMG]->Parent = this;
                    imgArray[aktIMG]->Width = 32;
                    imgArray[aktIMG]->Height = 32;
                    imgArray[aktIMG]->Left = 16 + i3 * 60;
                    imgArray[aktIMG]->Top = 60 * i2;
    imgArray[aktIMG]->OnClick =  Image1Click; //Zuweisung eines Events für das PopUpMenue
    

    dann würde aber trotzdem jedes Image die Funktion Image1Click im Code oder wie in deinem Bsp.: OnDynImageClick; Aufrufen. Daher wüßte ich immer noch nicht auf welches Image geklickt wurde.

    Um mein Problem etwas verständlicher zu machen:

    Ich erstelle mehrere Images dynamisch und versuchen dann mit onclick herauszufinden auf welches ich geklickt habe.

    Danke!



  • Lies dir akaris Post nochmal genau durch. 😉



  • 🙂

    Sorry, ich komm nicht drauf! Kannste mir evtl. noch ein Tip geben.



  • Hallo

    hast du überhaupt schon mal den von mir geposteten Code ausprobiert? Vor allem den Teil in der Eventmehtode, mit dem cast?

    Mach dir doch mal Gedanken darüber, was wohl dieser Parameter *TObject Sender in den Eventmehtoden zu bedeuten hat. Hier mal ein Zitat aus der BCB-Hilfe zu TNotifyEvent

    Der Parameter Sender ist das Objekt, dessen Ereignisbehandlungsroutine aufgerufen wird. Beispielsweise ist bei einem OnClick
    -Ereignis einer Schaltfläche der Parameter Sender die Schaltflächenkomponente, die angeklickt wurde.

    bis bald
    akari



  • Also ich hatte dein Code ausprobiert. Aber leider eine Leerestelle in der MessageBox gehabt wo dann eigentlich der Sender stehen sollte. Bestimmt hab ich da was falsch gemacht. Naja, ich werde glaub ich für heute mal Pause machen, evtl. blick ich da ja morgen durch. 😉

    Trotzdem erstmal vielen Dank.

    Gruß

    kmb



  • Hallo

    Aber leider eine Leerestelle in der MessageBox gehabt wo dann eigentlich der Sender stehen sollte

    das liegt ja auch daran, das du den einzelnen dynamischen Images auch noch passende Namen verpassen solltest. Es bietet sich da eine der Laufvariablen an :

    for (int i3 = 0; i3 < 7 && aktIMG < imgNum; i3++)   //IMG Zeichnung
                    {
                    imgArray[aktIMG]->Parent = this;
                    imgArray[aktIMG]->Name = "DynImage" + IntToStr(i3);
                    imgArray[aktIMG]->Width = 32;
                    ...
    

    Da ich in den von dir geposteten Codeausschnitt nicht die Erzeugung der Image-Instanzen (mit new) sehe :
    Die Namenszuweisung wie auch die Zuweisung des Parents solltest du aber gleich nach dem Erzeugen des Images machen.

    bis bald
    akari


Anmelden zum Antworten