Komponente erstellen
-
Hallo,
ich versuche mich grad darin, eine eigene Komponente zu schreiben. Habe allerdings Probleme mit der. Ich habe über Komponenten nicht sehr viel Ahnung, da es meine erste ist. Wäre also auch für "Lesestoff" sehr dankbar. Jetzt zu meinem Problem. Ich will die Click Methode bei einem Button überschreiben und eine Message ausgeben. Hierzu mal mein Quellcode:
MyButton.h
//--------------------------------------------------------------------------- #ifndef MyButtonH #define MyButtonH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> #include <StdCtrls.hpp> //--------------------------------------------------------------------------- typedef void __fastcall (__closure *MyClickEvent)(TObject *Sender,TPoint Position); class PACKAGE TMyButton : public TButton { private: MyClickEvent IVMyOnClick; protected: public: void __fastcall Click() { ShowMessage("Test"); } __fastcall TMyButton(TComponent* Owner); __published: __property MyClickEvent MyOnClick={read=IVMyOnClick,write=IVMyOnClick}; }; //--------------------------------------------------------------------------- #endif
MyButton.cpp:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MyButton.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck wird benutzt, um sicherzustellen, daß die erzeugten Komponenten // keine rein virtuellen Funktionen besitzen. // static inline void ValidCtrCheck(TMyButton *) { new TMyButton(NULL); } //--------------------------------------------------------------------------- __fastcall TMyButton::TMyButton(TComponent* Owner) : TButton(Owner) { } //--------------------------------------------------------------------------- namespace Mybutton { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TMyButton)}; RegisterComponents("Beispiele", classes, 0); } } //---------------------------------------------------------------------------
Wenn ich das Compiliere bekomme ich folgenden Fehler:
[C++ Fehler] MyButton.h(20): E2113 Virtuelle Funktion '_fastcall TMyButton::Click()' verursacht Konflikte mit der Basisklasse 'TButton'Wer kann mir da weiterhelfen?? Gibt es Tutorials oder ebooks über das erstellen von Komponenten?
Gruss,
MTO
-
Hi,
versuch:
protected: DYNAMIC void __fastcall Click(void){ShowMessage("test");}
ansonsten siehe Tut
[ Dieser Beitrag wurde am 29.04.2003 um 10:41 Uhr von AndreasW editiert. ]
-
Vielen Dank für die schnelle Hilfe.
Aber da hätte ich jetzt noch eine Frage. Ich mach jetzt gerade eine Komponente DBGrid und will in die Funktion DrawDataCell rein. Wie läuft das dann?? Ich hab hier ein Codebeispiel:
protected: DYNAMIC void __fastcall DrawDataCell(TObject *Sender, const TRect &Rect, TField *Field, TGridDrawState State) { ShowMessage("Test"); }
Allerdings bekome ich die Meldung nicht.
-
Hi,
du mist dem Grid auch schon erzählen, dass eine Benutzerdefinierte FUktion verwendet werden soll.
Das machst du, indem du folgende eigenschaft auf false setzt:__property bool DefaultDrawing = {read=FDefaultDrawing, write=FDefaultDrawing, default=1};
Auch nett: http://delphi.about.com/library/weekly/aa031699.htm
[ Dieser Beitrag wurde am 29.04.2003 um 11:32 Uhr von AndreasW editiert. ]
-
Hi,
danke für die Hilfe. Das funktionert aber irgendwie immer noch nicht. Kann es sein, das ich das falsch aufrufe??? Wie gesagt, ich bin in Komponenten Programmierung der totale Neuling.
Gruss,
MTO