Dynamischer Button in Funktion -> onClick



  • Hallo zusammen,
    mein Problem ist folgendes: Ich habe mir eine Funktion programmiert, die dynamisch TImages erzeugt und dem dann ein Onclick Event zuweist. Das sieht dann folgendermaßen aus:

    void erstellen(){
    for(int y=0; y<Karten; y++){
            for(int x=0; x<Karten; x++){
                    karten[y][x]= new TImage(Form1);
                    karten[y][x]->Parent=Form1;
                    karten[y][x]->Height=59;
                    karten[y][x]->Width=40;
                    karten[y][x]->Top=59*y+20;
                    karten[y][x]->Left=40*x+20;
                    karten[y][x]->Stretch = true;
                    karten[y][x]->Picture->LoadFromFile("IntToStr(kartenmatrix[y][x])+".bmp");
                    karten[y][x]->Name="KarteNr"+IntToStr(x)+"x"+IntToStr(y);
                    karten[y][x]->Transparent = true;
                    karten[y][x]->OnClick= KarteWaehlen;   
                      }
                    }
            }};
    

    Im Header hab ich das OnClick Event dann folgendermaßen deklariert:

    void __fastcall KarteWaehlen(TObject *Sender);
    

    Und dann noch in der Form1:

    void __fastcall TForm1::KarteWaehlen(TObject *Sender)
    {
    
    };
    

    Jetzt sagt er mir an: Aufruf der unbekannten Funktion KarteWaehlen.. wie kann ich das lösen?? 😮

    Und lässt sich das überhaupt folgendermaßen lösen?
    Kann man vielleicht das Onclick direkt auf eine Funktion weiterleiten?
    Wichtig ist nur das das *Sender-Tag mitgesendet wird, denn das geklickte Image muss sich später noch identifizieren. 🙂

    Danke im Voraus spidoOr



  • In welchem Abschnitt der Header hast du das eingefügt? private,public,__published

    Ersteres sollte es nicht sein

    Kann man vielleicht das Onclick direkt auf eine Funktion weiterleiten?

    ???

    Das machst du doch damit



  • Das steht immoment oben in der Unit1.cpp , wenn ich das nämlich in die Unit1.h bei public: hintu dann sagt er undefiniert Form1.

    ???Das machst du doch damit

    Ja schon aber ich meine auf eine selbst geschriebene Funktion ohne __fastcall, oder was das auch immer ist.



  • naja, deine OnClick Funktion ist doch von dir geschrieben!

    Lass dich doch von dem fastcall nicht irritieren



  • [Edit]...[/Edit]
    wo im Quelltext zeigt er den Fehler an?



  • private oder public sind schon ganz in Ordnung für diese Funktion. So wie ich es verstanden hab, solllte man keine Funktionen selbst unter published anlegen.

    Das Problem dürfte eher sein, dass erstellen() keine Memberfunktion von Form1 ist. Ergo ist dort auch keine Funktion KarteWahlen bekannt. Sinnvollerweise sollte erstellen() ebenfalls zu einer Memberfunktion von Form1 gemacht werden.



  • Linnea schrieb:

    [Edit]...[/Edit]
    wo im Quelltext zeigt er den Fehler an?

    Er zeig mir gleich die Zeile:

    karten[y][x]->OnClick= KarteWaehlen;
    

    Als Fehler an, nach einigem Probieren steht da jetzt sogar undefiniertes Symbol KarteWaehlen



  • Ich formiliere meine Aussage mal um: Die Funktion erstellen() ist global deklairiert. Als solche kann sie keine Funktionen der Form1 kennen.

    Und auch das globale Array karten würde ich in die Form1 aufnehmen.

    Grüße Joe_M.



  • Hi!

    du musst die Adresse angeben! mit &

    karten[y][x]->OnClick= **&**KarteWaehlen;

    Gruß



  • Nein, das wäre nicht so ok.

    karten[y][x]->OnClick= KarteWaehlen;

    ist schon richtig



  • Danke schonmal werde das mal probieren etwas umzuschreiben


Log in to reply