Globales Click-Ereignis



  • Hallo,

    ich hab mehrere Image-Onjekte, die bereits im Entwurf vorhanden sind. Beim Click-Ereignis rufe ich meine Funktion auf:

    fClickImage(Separator(dynamic_cast<TImage*>(Sender)->Name, "_", 2, false), Separator(dynamic_cast<TImage*>(Sender)->Name, "_", 4, false));
    

    Diesen Aufruf muss ich aber in jedem Image-Click-Ereignis einbauen. Kann ich das nicht global machen ?

    Danke,

    Ernst



  • du kannst allen Images die gleiche OnClick-Methode zuweisen, das geht z.B. im Objektinspektor zur Entwurfszeit, dort einfach die Methode die du willst auswählen, statt eine neue zu Erstellen

    zur Laufzeit kannst du auch durch alle Images iterieren und dann die OnClick-Methode zuweisen, das geht am besten wenn du die Images in einem Feld/Vector/List hast (Pseudocode):

    for (int i=0; i<ImageFeldAnzahl; i++)
      InageFeld[i]->OnClick = MeineOnClickFunktion; //Zuweisung ohne Klammern
    


  • Hallo,

    danke. Ich hab's so gemacht:

    for(int i=0; i < frmBear->ComponentCount; i++)
    	{
    		TImage* img = dynamic_cast<TImage*>(frmBear->Components[i]);
    		if (img)
    		{
    			img->OnClick = fClickImage; //Zuweisung ohne Klammern
    		}
    	}
    

    Da krieg ich die Meldung:
    [BCC32 Fehler] cBear.cpp(36): E2034 Konvertierung von 'void (*)(UnicodeString,UnicodeString)' nach 'TNotifyEvent' nicht möglich



  • Hallo

    du kannst nicht einfach eine x-Beliebige Funktion an einen Event zuweisen. Die Funktion muß schon den richtigen Prototypen haben, und insbesondere muß eine Methode (des Forms) sein. Verwende die Click-Methode die du schon im OP erwähnt hast.

    bis bald
    akari


Anmelden zum Antworten