Zeiger auf Ereignisfunktion übergeben
-
du kannst nicht auf published-Funktionen zugreifen, sonst könnte ja jeder kommen und überall drin rum pfuschen.
warum schreibst du nicht einfach neue als public deklarierte ereignis-funktionen, auf die kannst du dann per Form1->MyOnClick zugreifen.
// header public: void __fastcall MyOnImageClick(TObject *Sender); // cpp void __fastcall TForm1::MyOnImageClick(TObject *Sender) { // blah } // dann etwa so beim erzeugen des bildes TMyImage *Image = new TMyImage(); Image->OnClick = Form1->MyOnImageClick;wenn du schon ne klasse hast, die ein bild dynamisch erzeugt, so sollte diese auch die nötigen ereignis-funktionen bereitstellen und diese nicht von irgendwo anders her klauben.
was willst du denn überhaupt erreichen?
welche funktionalität soll denn deine klasse bieten?
-
Sunday schrieb:
wenn du schon ne klasse hast, die ein bild dynamisch erzeugt, so sollte diese auch die nötigen ereignis-funktionen bereitstellen und diese nicht von irgendwo anders her klauben.
hab ich ja, wollte nur die Ereignisfunktionen des Formulars aufrufen, damit man auch sieht, wo das dazu gehört. Von da aus wollte ich eh meine Funktionen aufrufen.
War eigentlich mehr sone "optik" Sache.Sunday schrieb:
was willst du denn überhaupt erreichen?
welche funktionalität soll denn deine klasse bieten?Das wird ne "dynamisch erzeugte" Bildschirmtastatur, bei der ich mir die Arbeit gespart hab, jedes "Tasten"-Bild einzeln einzubinden und einzurichten.
Ich bau ne Auto- bzw. Wohnmobil-"Alarmanlage", die unter anderem auch DVD, Navi, Radio, Rückfahrkamera, Einparkhilfe, etc. steuert. Im Alarmmodus wird das Auto mit zig Gassensoren (von Campinggas bis K.O.-Gas), 3 Kameras, usw. überwacht und ist (fast) beliebig erweiterbar.
Alles auf Xp-Basis, nur halt dass der Benutzer von XP nich viel zu sehen bekommt. Steuerung läuft mit 7"-Touchscreen. Damit der Benutzer auch schön sein Ziel ins Navi eingeben kann brauch ich halt die Bildschirmtastatur, und damits schöner aussieht mach ichs mit Bilder als Buttons.
-
el Clio,
el Clio schrieb:
Wie muss dann die Deklaration aussehen?
... public: Tasten(TForm* Dest_Form, TPanel* Dest_Panel, ???, ???, ???); ...ein Beispiel:
//Klassen-Deklation/Definition class MyClass { TImage* Image1; public: MyClass(TNotifyEvent clickEvent) { //... Image1->OnClick = clickEvent; } }; //Instanz anlegen void __fastcall TForm1::Button7Click(TObject *Sender) { MyClass x(&Button7Click); }
-
Wenn dann so:
void __fastcall TForm1::Button7Click(TObject *Sender) { ... MyClass *x = new MyClass(Button7Click); ... }
-
F98 schrieb:
Wenn dann so: ...
Wieso?
-
dschensky schrieb:
el Clio,
el Clio schrieb:
Wie muss dann die Deklaration aussehen?
... public: Tasten(TForm* Dest_Form, TPanel* Dest_Panel, ???, ???, ???); ...ein Beispiel:
//Klassen-Deklation/Definition class MyClass { TImage* Image1; public: MyClass(TNotifyEvent clickEvent) { //... Image1->OnClick = clickEvent; } }; //Instanz anlegen void __fastcall TForm1::Button7Click(TObject *Sender) { MyClass x(&Button7Click); }Dann kommt das hier:
[C++ Fehler] Form_Tastatur.cpp(18): E2285 Keine Übereinstimmung für 'Tasten::Tasten(TFormTastatur * const,TPanel *,void (_fastcall * (_closure )(TObject *,TMouseButton,TShiftState,int,int))(TObject *,TMouseButton,TShiftState,int,int))' gefunden
-
el Clio,
jetzt setz Dich bitte mal hin und überlege, ob in Deinem letzen Posting vielleicht irgend welche Informationen fehlen könnten.
Versetze Dich dazu in die Lage des Lesers, der geneigt sein könnte, Dir bei Deinem Problem zu helfen.
-
dschensky schrieb:
el Clio,
jetzt setz Dich bitte mal hin und überlege, ob in Deinem letzen Posting vielleicht irgend welche Informationen fehlen könnten.
Versetze Dich dazu in die Lage des Lesers, der geneigt sein könnte, Dir bei Deinem Problem zu helfen.Sorry. Wenn ich deinen Vorschlag (siehe Zitat im bemängelten Beitrag) übernehme wird beim copilieren der o.g. Fehler gezeigt.
(Hoffe, so isses besser ;-))
-
el Clio schrieb:
(Hoffe, so isses besser ;-))
Ach, was soll's: Eigentlich hatte ich gehofft, daß Du auf die Idee kommst, ein Stück Deines Quellcodes zu posten - als da wäre vor allem die Signatur Deiner Methode.
(Es könnte auch eine gute Idee sein, vor dem Posten mal zu überprüfen, ob die Signatur in Deklaration und Definition tatsächlich identisch ist!?)
-
dschensky schrieb:
Ach, was soll's: Eigentlich hatte ich gehofft, daß Du auf die Idee kommst, ein Stück Deines Quellcodes zu posten - als da wäre vor allem die Signatur Deiner Methode.
(Es könnte auch eine gute Idee sein, vor dem Posten mal zu überprüfen, ob die Signatur in Deklaration und Definition tatsächlich identisch ist!?)Ach so! Naja, der Quellcode ist immernoch der gleiche, wie einige Posts vorher (ca. Anfang der 2. Seite). Habe "nur", wie gesagt, im Konstruktor das "TNotifyEvent ..." bzw. abgeändert in "TMouseEvent..." gemäss deinem Vorschlag übernommen. Sowohl in der Deklaration als auch beim Aufruf. Und bei beiden Versuchen hab ich das gepostete Ergebnis erhalten. Aber egal!
Der ganze Aufwand passt langsam nicht mehr zum Gesamtaufwand. Ich belass es jetzt so, wies ist.
Trotzdem ein dickes Danke an alle, die sich beteiligt haben!!!