Komponente erstellen: TEdit & TButton
-
Mit dem Borland Tutorial habe ich einen groben Eindruck bekommen, wie man eine Komponente selber entwickelt.
Im Beispiel wird aber nur eine visuelle Komponente verwendet.
Ich möchte nun wissen, wie man vorgeht, wenn man 2 Verwendet. Z.B. ein TEdit und einen TButton daneben.
Wäre echt supi lieb, wenn mir das mal einer erklären könnte!
-
Hallo
Wenn du solche zwei Komponenten zusammensetzen willst nimmst du TControl oder TPanel als Basis, je nachdem wie viel du vom Container selbst machen willst.
bis bald
akari
-
Wie sieht denn dann der Konstruktor aus ... ich habe sowas noch nie gemacht.
__fastcall TMyComp::TMyComp(TComponent* Owner) : TControl(Owner) { IVEdit = new TEdit(this); IVEdit->Parent = (TWinControl)*this; IVEdit->Show(); } //-----------------------------------------------------------------------------> so??
-
Hallo
Um nicht in TWinControl casten zu müßen nimm gleich TWinControl anstelle von TContrl als Basis.
Das Show brauchst du aber gar nicht.bis bald
akari
-
Danke jetzt gehts ...
Wie bekomme ich so ein plus mit Unteroptionen im Objectinspektor hin? (wie z.B. bei Font)
LG
-
Hallo
Das Plus bekommst du nur bei Bestimmten Properties mit dem Objektinspektor bekannten Typen. Im allgemeinen Set. Möglicherweise geht auch eine Property mit Zeiger auf ein struct/class, das ebenfalls wieder aus Properties besteht.
bis bald
akari
-
Eine letzte Frage hab ich noch ... wenn ich eine Komponete erstelle und diese ein TEdit bekommt --- wie kann ich ein Ereignis OnEditChange "bauen", dass das OnChange Ereignis von TEdit sozusagen Weiterreicht. Im Objektinspektor soll das Ereignis OnEditChange sichtbar sein.
LG
-
Hallo
Zuerst must du in deiner neuen Komponente manuell den Event abfangen.
Dann verpasst du deiner Komponente eine Property von gleichen Eventtyp (TNotifyEvent wenn ich mich nicht irre) und setzt diese im Konstruktor erstmal auf NULL. Dann must du nur noch in deiner manuellen Behandlung den Event ausführen wenn eine Eventmethode hinterlegt wurde.bis bald
akari
-
So kommt nen Fehler "Kein zulässiger Typ"
struct TMyStruct { public: int IVval1; int IVval2; __property int val1 = {read=IVval1, write=IVval1}; __property int val2 = {read=IVval2, write=IVval2}; }; class PACKAGE TMyComp : public TWinControl { private: TMyStruct IVMyStruct; protected: public: __fastcall TMyComp(TComponent* Owner); __published: __property TMyStruct MyStruct = {read=IVMyStruct, write=IVMyStruct}; };Habe Ich was falsch gemacht???
Zuerst must du in deiner neuen Komponente manuell den Event abfangen.
--> Wie mach ich das genau?
-
Hallo
- Wie schon gesagt muß die Property einen Zeiger auf das struct rausgeben. Und dann darf es auch kein set für die Property geben
__property TMyStruct* MyStruct = {read=&IVMyStruct};- Wie du es im OI machen würdest, nur das du jetzt eben manuell die Eventmethode hinschreiben und mit dem TEdit verbinden must.
class TMyComp { ... private : void __fastcall OnChange(TObject* Sender); // Deine neue Methonde TNotifyEvent iMyChange; // Interne Speichervariable für den Event ... __published: property TNotifyEvent OnMyChange = {read = iMyChange, write = iMyChange, default = NULL}; // Property für den Event nach außen } void __fastcall TMyComp::OnChange(TObject* Sender); { if (iMyChange) // Wenn Event zugewiesen iMyChange(this); // ausführen }bis bald
akari
-
Danke für deine Antwort

Ich habe es jetzt so probiert:
class PACKAGE TMyComp : public TWinControl { private: struct TMyStruct { public: int IVval1; int IVval2; __property int val1 = {read=IVval1, write=IVval1}; __property int val2 = {read=IVval2, write=IVval2}; } IVMyStruct; protected: public: __fastcall TMyComp(TComponent* Owner); __published: __property TMyStruct *MyStruct = {read=&IVMyStruct,write=&IVMyStruct}; };Leider funktioniert das nicht ... der Compiler sagt: Bezeichner erwartet ...
Wie mache ich das richtig?