Neue Komponente - Text beeinflussen
-
Hallo Leute!!
Ich programiere mit Borland und habe eine neue Komponente erstellt. Ich habe alles von Komponente TCustomControl abgeleitet.
|----| E0.0 ----| |---- A0.0 |----|Jetzt möchte ich, dass ich, wenn das Programm läuft, die Eingänge und Ausgänge gesetzt werden können! Sprich es muss möglich sein den Text wie bei der Komponente TEdit, beeinflußen zu können!
Ich weis wie ich die Komponente in einer Richtung beeinflußen kann.
.h Datei
__property Text;.cpp Datei
Canvas->TextOutA(50,30,Text);Aber wie kann ich den Text bei laufender Programm ändern, so wie bei TEdit?
Grüße Stefan
/Edit: "beeinflußen", da kriegt man ja Augenkrebs!

-
Hallo
Du könntest die Funktionalität von TEdit (bzw. dem dahinterliegendem WinAPI-Control) selber nachprogrammieren. Sprich du verwendest die Key-Events um Eingaben zu filtern (Buchstaben und Zahlen in Text-Eigenschaft einfügen, Pfeiltasten um Cursor zu verschieben). Das ist recht auswendig.
Oder du setzt in dein Control noch ein TEdit-Control ein, das für dich die Eingabe übernimmt.bis bald
akari
-
Danke für die Antwort!!
Das habe ich mir auch überlegt, in meine Control zusätzlich TEdit reinzunehmen, leider funktioniert es irgendweie nicht!Weist du vielleicht wie das geht?
Ich habe in die Header Datei der Komponente folgendes eingefügt!!
TEdit *FEdtit;
leider funktioniert es nicht!!
-
Hallo
Naja es reicht nicht nur einen Pointer zu deklarieren. Du must schon noch die Instanz des Controls selber erzeugen und dem Pointer zuweisen. Siehe FAQ Abschnitt Komponenten benutzen, dort wird das dynamische Erstellen von Controls erläutert.
Auch ist "funktioniert nicht" keine aussagekräftige Fehlerbeschreibung.
bis bald
akari
-
Sorry, mit es funktioniert nicht meine ich, dass es nicht passiert, auch keine Fehlermeldungen!!
Also ich habe mir das FAQ genauesten angeschaut, aber keine Lösung zu diesem Problem gefunden!
Zumindestens habe ich nichts gefunden beüglich, wie ich zu der neuen Komponente, die von TCustomControl abgeleitet ist, noch zusätzlich die Eigenschaften von TEdit gebe!?
.h Datei
#ifndef TAndH #define TAndH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> #include <Controls.hpp> //--------------------------------------------------------------------------- class PACKAGE TAnd : public TCustomControl { TEdit *FEdtit; private: int GetIn1; protected: virtual void __fastcall Paint(void); virtual void __fastcall SetIn1(const WideString Value); public: __fastcall TAnd(TComponent* Owner); __published: __property Text; __property OnClick ; __property OnDblClick ; __property OnMouseDown ; __property OnMouseMove ; __property OnMouseUp ; // __property int In1 = {read=GetIn1, write=SetIn1, nodefault}; }; //--------------------------------------------------------------------------- #endif.cpp Datei
#include <vcl.h> #pragma hdrstop #include "TAnd.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TAnd *) { new TAnd(NULL); } //--------------------------------------------------------------------------- __fastcall TAnd::TAnd(TComponent* Owner) : TCustomControl(Owner) { GetIn1=1; } //--------------------------------------------------------------------------- void __fastcall TAnd::Paint(void) { Canvas->MoveTo(0,20); //Eingang1 Canvas->LineTo(25,20); //Eingang1 Canvas->MoveTo(0,50); //Eingang2 Canvas->LineTo(25,50); //Eingang2 Canvas->Rectangle(25,10,75,60); //Körper Canvas->MoveTo(75,35); //Eingang2 Canvas->LineTo(100,35); //Eingang2 Canvas->TextOutA(50,30,"&"); //Canvas->TextRect("und",0,5,"??"); } //--------------------------------------------------------------------------- void __fastcall TAnd::SetIn1(const WideString Value) { //GetIn1=In1; } //--------------------------------------------------------------------------- namespace Tand { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TAnd)}; RegisterComponents("Standard", classes, 0); } }Kann mir jemand helfen?
-
also eigentlich mußt du doch nur auf die Änderung des Textes reagieren, z.B.:
__published: __property String Text = { read=FText, write=SetText }; private: String FText; void __fastcall SetText(String value);und die Funktion SetText
void __fastcall TForm1::SetText(String value) { if(FText != value) { FText = value; //Tu hier etwas wenn der Text sich ändert, z.B.: Paint(); } }und im Programm dann einfach:
TAnd *And = new TAnd(); And->Text = "blah";
-
danke Linnea aber das ist mir schon bekannt!
Und das ist nicht das was ich brauche!Ich will den Text beeinflussen, wo das Programmschon läuft, sprich compieliert ist!!!! Deswegen will ich irgendwie die Eigenschaften von TEdit oder sogar besser ComboBox implementieren!
Das Problem dabei ist, ich habe meine Komponente schon von TCustomControl angeleitet, aber wie gebe ich dieser Komponente noch die Eigenschaften von TEdit bzw. Combobox??
Help!!!
Grüße Stefan
-
Lies Dir nochmal die Antworten durch!
Du musst eine TEdit- Komponente in Deine Kompo einfügen - nicht auch noch von TEdit erben.
Ein Zeiger reicht nicht!
Du musst im Constructor die Komponente TEdit erzeugen - Parent = Deine Kompo.
Im destructor sollte auch deletet werden.Die Ereignisse des TEdit kannst Du in Deiner Kompo dann nach Bedarf abfangen! Dazu muessen Methoden implementiert und den richtigen On... Ereignissen des TEdit zugeordnet werden.
Gruss
Frank
-
ja das was ich!
Aber wie sieht der Code dazu aus??
Das ist doch kein Code "TEdit erzeugen - Parent = Deine Kompo"!
Mein Problem ist nicht das Verständniss sonder der Code!!!
Ich brauche wenigstens ein kleines Besispiel!!!
-
Schau in die FAQ unter "Komponenten benutzen - zur Laufzeit erstellen, anzeigen und Events zuweisen"
-
swunder schrieb:
Das ist doch kein Code "TEdit erzeugen - Parent = Deine Kompo"!
...
Ich brauche wenigstens ein kleines Besispiel!!!Ist das Code?:
(Anmerkung:
alle Hauptfunktionen sind entfernt, das zeigt nur noch, wie Komponenten in
Komponenten eingefügt werden können!)Eine Header- datei
//--------------------------------------------------------------------------- #ifndef VolCtrlH #define VolCtrlH //--------------------------------------------------------------------------- //De folschend glasse is enne Gombonende for de //Reschelung dor Laudsderge un zum //ei un aus- gnibsen der Brabbelbogsen //Des Ganse muss nadierlich in enne baggasch gebaggd wern, sunsd //dut dos ned richtsch glabben class PACKAGE TVC : public TCustomPanel { private: TTrackBar *VolumeTrackBar; TSpeedButton *OnOff; TPicture *FSpeakerSymbol; void __fastcall SetSpeakerSymbol(TPicture *Pic); protected: // virtual void __fastcall Loaded(); void __fastcall VolumeChange(TObject *Sender); void __fastcall VolumeMute(TObject *Sender); public: virtual void __fastcall Loaded(); __fastcall TVC(TComponent* Owner); virtual __fastcall ~TVC(); DYNAMIC void __fastcall Resize(); __published: __property TPicture *SpeakerSymbol ={read=FSpeakerSymbol, write=SetSpeakerSymbol}; __property Align; __property Anchors; __property Enabled; }; //--------------------------------------------------------------------------- #endifDie CPP- datei
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "VolCtrl.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- // ValidCtrCheck wird benutzt, um sicherzustellen, daß die erzeugten Komponenten keine // rein virtuellen Funktionen haben. // static inline void ValidCtrCheck(TVC *) { new TVC(NULL); } //--------------------------------------------------------------------------- //Dor gonschdruggdor __fastcall TVC::TVC(TComponent* Owner) :TCustomPanel(Owner) { FSpeakerSymbol=new TPicture; VolumeTrackBar=new TTrackBar(this); VolumeTrackBar->Parent=this; VolumeTrackBar->Orientation=trVertical; VolumeTrackBar->TickMarks=Comctrls::tmBoth; OnOff=new TSpeedButton(this); OnOff->Parent=this; } //--------------------------------------------------------------------------- //Dor Deschdruggdor __fastcall TVC::~TVC() { delete VolumeTrackBar; delete FSpeakerSymbol; } //--------------------------------------------------------------------------- //wenns e neies Bildschen gibbt for de Anzeische void __fastcall TVC::SetSpeakerSymbol(TPicture *Pic) { FSpeakerSymbol->Assign(Pic); } //--------------------------------------------------------------------------- //de folgnde fungdschon werd nur geruffn, wenn dis Ganze ne Gombonende is void __fastcall TVC::Loaded() { TCustomPanel::Loaded(); OnOff->Flat=true; OnOff->AllowAllUp=true; OnOff->GroupIndex=1; try { OnOff->Glyph->LoadFromResourceName((int)HInstance,"VOLSPEAKERS"); } catch (...) { //In de Resoorsen vun der Gombonende muss ooch e Bildchen drinne sin //sonsd gibbet's enne Egsebschn //Dor Nohme is e boor Zeiln vurher geschriem } //oder e Bildschen muss dr brobberdieh zugeordned sin if (!FSpeakerSymbol->Bitmap->Empty) OnOff->Glyph->Assign(FSpeakerSymbol); OnOff->Width=28; OnOff->Height=28; OnOff->Top=Height-OnOff->Height-2; OnOff->Left=(Width-OnOff->Width) / 2; OnOff->NumGlyphs=4; OnOff->GroupIndex=1; OnOff->Enabled=Enabled; OnOff->OnClick=VolumeMute; VolumeTrackBar->Align=alNone; VolumeTrackBar->Anchors=VolumeTrackBar->Anchors<<akLeft<<akTop<<akRight<<akBottom; VolumeTrackBar->Top=1; VolumeTrackBar->Left=1; VolumeTrackBar->Height=Height-30; VolumeTrackBar->Width=Width-2; VolumeTrackBar->ThumbLength=Width-20; VolumeTrackBar->OnChange=VolumeChange; } //--------------------------------------------------------------------------- //wenns enne neie Grehse gibbt for de Anzeische vun dos Ganse void __fastcall TVC::Resize() { TCustomPanel::Resize(); VolumeTrackBar->ThumbLength=Width-20; VolumeTrackBar->Height=Height-30-15; OnOff->Top=Height-OnOff->Height-2; OnOff->Left=(Width-OnOff->Width) / 2; } //--------------------------------------------------------------------------- void __fastcall TVC::VolumeChange(TObject *Sender) { //Was bassiern soll, wenn's Bedahl verschohm wurde } //--------------------------------------------------------------------------- void __fastcall TVC::VolumeMute(TObject *Sender) { //Was bassiern soll, wenn's Knebbelchen bedadcht werd } //--------------------------------------------------------------------------- //Alles Annere muss erschd nuch dazugebasdeld wern. //Su dos ganse Zeisch, dormid dos ooch richdsch mid de Systemschdeierung //zusammebassen dud. //Dos gemehr habsch mah alles weggemochd, dormit dos ned suh //gomblidsierd guggen dud.Gruss
Frank