Bei Laufzeit erstellten Komponenten Message-Funktion zuweisen



  • was is klar...ich hab ne klasse in der ich im Konstruktor Komponenten erstelle, ich hab nur einen Zeiger auf die Form, damit ich die Komponenten erstellen kann, wa auch alles toll klappt...ich kann aber jetzt nicht so ohne weiteres die OnClick-Zuweisungen in einer Funktion machen die von Form1 ist, weil diese Klasse ja unabhängig von TForm1 sein soll soweit es möglich ist

    so in der art sollte es doch eigentlich gehen:

    TPanel* pPanel;
    //
    
    void __fastcall TForm1::KlickMich(TObject* Sender)
    {
     MessageBox(NULL,"aloha","",0);
    }
    
    void test()
    {
     pPanel=new TPanel(Form1);
      pPanel->Parent=Form1;
      pPanel->Caption="fuck";
      pPanel->OnClick=KlickMich;  //hier muß wahrscheinlich noch 
                                  //irgendne konvertirerung rein!
    }
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    test();
    }
    

    [ Dieser Beitrag wurde am 26.01.2003 um 13:00 Uhr von crass editiert. ]



  • Das mit dem C++-Tutorial ist wirklich ne gute Idee... Woher soll die Funktion test() (die im globalen Sichtbarkeitsbereich(/Namespace) liegt) wissen wo sie die funktion "KlickMich" (welche im Sichtbarkeitsbereich von TForm1 liegt) findet?

    -junix



  • Dann guck dir mal an, was für eine Fehlermeldung du kriegst, und überleg nochmal, was das bedeuten könnte.

    Und ich sage immer noch: C++-Tut lesen.



  • so gehts auch ned:

    pPanel->OnClick=TForm1::KlickMich;

    ich hab ja extra geschrieben da muß eine Konvertierung hin...jetzt sagt mir doch mal welche oder wißt ihrs selber nicht



  • Nun hör mal auf rumzuprobieren und schalt bitte dein Hirn ein. Bedenke dass von einer klasse mehr als 1 Instanz vorhanden sein kann. Woher soll also - bei deiner Schreibweise - der Compiler wissen welche Instanz du meinst? das klappt so nur mit statischen Funktionen.

    -junix



  • Klar wissen wirs, aber du sollst es dir mithilfe eines C++-Tuts selbst beibringen. Das nennt man Hilfe zur Selbsthilfe. 🙂

    Edit: @junix: Was soll das? 😉 Ist das Absicht? *g*

    [ Dieser Beitrag wurde am 26.01.2003 um 13:24 Uhr von Eßer editiert. ]



  • Original erstellt von Eßer:
    @junix: Was soll das? 😉 Ist das Absicht? *g*

    Was denn? 🙄 Ich bin einfach nur shcneller als du (-;

    -junix



  • na schön habs jetzt, danke 😃
    hab mich wirklich ziemlich noobig angestellt, aber im prinzip kann ich c++ (jedenfalls c), nur wenn man zu lang vorm rechner sitzt, rafft man irgednwann die einfachsten sachen nimma, also vielen dank



  • Original erstellt von crass:
    [...] aber im prinzip kann ich c++ (jedenfalls c) [...]

    C != C++ !!!!! Leider hat C++ einfach ähnliche Syntax wie C.

    -junix



  • Original erstellt von Eßer:
    Und ich sage immer noch: C++-Tut lesen.

    Da hilft einem ein C++-Tut auch nicht viel weiter, denn __closure ist ein Borland-spezifisches Schlüsselwort. Funktionszeiger, die mit __closure deklariert sind, können nur auf Elementfunktionen einer Instanz einer Klasse zeigen. Deshalb konnte er die Funktion nicht außerhalb einer Klasse deklarieren und dem Pointer zuweisen.


Anmelden zum Antworten