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 zuweisenAlso 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 PopUpMenuedann 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