Bei Laufzeit erstellten Komponenten Message-Funktion zuweisen
-
Also, nur noch einmal für dich:
// Header-Datei private: void __fastcall MeineKlickFunktion(TObject*); // cpp-Datei // irgendwo (z.B. im Konstruktor der Form): Button1->OnClick = MeineKlickFunktion; // irgendwo: void __fastcall TForm1::MeineKlickFunktion(TObject* Sender) { ShowMessage("HALLO"); }
-
und in wiefern unterschedet sich das jetzt von dem was ich versucht habe, aber nicht funktioniert?
-
Original erstellt von crass:
und in wiefern unterschedet sich das jetzt von dem was ich versucht habe, aber nicht funktioniert?Kann ich dir nicht sagen, aber so sollte es funktionieren.
-
so jetzt weiß ich wo der fehler liegt.. in nem neuen projekt hab ichs auch testweise hingekriegt..... diese OnClik- Zuweisung geht anscheinend nur in einer Funktion von der Form1
als zB Form1::OnCreate()
außerhalb von Form1 gehts nicht! so wie ichs versucht hab jedenfalls...
aber es muß doch eigentlich gehen?! ich wills außerhalb haben´!
-
Tipp: C++-Tut lesen.
Ist doch klar, ausherhalb der Klasse gehts so nicht. Du musst ihm schon sagen, dass die Funktion (und der Button) von Form1 ist.
-
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.