In einer neuen Komponete eine Image Komponete benutzen
-
Hallo,
richtig habe ich gerade auch schon drüber nachgedacht.
Danke für Deine Hilfe.
-
//--------------------------------------------------------------------------- __fastcall TDiagramm::TDiagramm(TComponent* Owner) : TComponent(Owner) { Image = new TImage(Owner); Image->Parent = ((TForm*)Owner)->Parent; Image->Width = 100; Image->Height = 100; Image->Canvas->Brush->Color = clBlack; Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height)); Image->Visible = true; }Hier kann Parent aber immer nur vom Typ TForm sein, ich möchte aber für die Komponenete als Parent eine GroupBox haben. Versuche ich meine Komponente
in eine GroupBox zu setzen erscheint das Image oben links in der Form
und nicht in der GroupBox.
Wie kann ich die Komponente am besten testen, öffne ich den Builder zweimal
mit der zu testenden Komponenete, kann ich die Komponente nicht mehr erzeugen.
Fehler :"Programm still running".
-
Hallo
dan must du für TDiagramm eine Eigenschaft vom Typ TWinControl erstellen, die du den gewünschten parent zuweisen kannst. Diesen gibts du dann über den Setter an das Image weiter.
bis bald
akari
-
#include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> class PACKAGE TDiagramm : public TComponent { private: TImage* Image; unsigned short VSampleTime; TWinControll VParent; //Instanz vom Typ TWinControll erzeugen protected: public: void __fastcall Paint(); __fastcall TDiagramm(TComponent* Owner); __published: __property TWinControll Parent={read VParent,write=VParent}; //und die Property dazu __property unsigned short SampleTime ={read=VSampleTime,write=VSampleTime}; };Meinst du es so, funktioniert nicht kennt den Typen nicht muss ich noch einen
Header includieren?
Oder kann ich nicht besser gleich von TWinControll ableiten.
-
Hallo
ich seh da auf anhieb mal ein paar Probleme :
#include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> class PACKAGE TDiagramm : public TComponent { private: TImage* Image; unsigned short VSampleTime; TWinControll *VParent; // Du brauchst einen Zeiger auf eine Instanz void __fastcall SetParent(TWinControl *NewParent); // Setter protected: public: void __fastcall Paint(); __fastcall TDiagramm(TComponent* Owner); __published: __property TWinControl *Parent={read = VParent,write=SetParent}; //wieder Pointer und fehlendes IstGleich, TWinControl falsch geschrieben __property unsigned short SampleTime ={read=VSampleTime,write=VSampleTime}; };und dazu in der Implementation
void __fastcall TDiagramm::SetParent(TWinControl *NewParent) { if (Image) Image->Parent = NewParent; VParent = NewParent; } // Im Konstruktor noch hinzufügen VParent = NULL;/Edit : Ich würde die Eigenschaft auch nicht nur Parent nennen, damit es nicht mit dem Parent von echten Controls verwechselt wird.
bis bald
akari
-
Alles klar, danke für das Beispiel.
-
Warum funktioniert die Zuweisung des Parent für Image hier nicht.
//--------------------------------------------------------------------------- __fastcall TDiagramm::TDiagramm(TComponent* Owner) : TComponent(Owner) { Image = new TImage(this); Image->Parent = ((TWinControl*)Owner)->Parent; //Parent des aufrufenden Objects Image->Visible = true; Image->Canvas->Brush->Color = clBlack; Image->Width = 100; Image->Height = 100; Image->Canvas->FillRect(Rect(0,0,100,100)); }Object erzeugen
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Diagramm = new TDiagramm(this); //Object erzeugen }
-
Manchmal treibt man ein Blödsinn, es muss natürlich heißen
//--------------------------------------------------------------------------- __fastcall TDiagramm::TDiagramm(TComponent* Owner) : TComponent(Owner) { Image = new TImage(this); Image->Parent = (TWinControl*)Owner; //Parent des aufrufenden Objects Image->Canvas->Brush->Color = clBlack; Image->Width = 100; Image->Height = 100; Image->Canvas->FillRect(Rect(0,0,100,100)); }dann gehts.
-
zum Testen:
ich öffne immer erst ein Testprojekt und dann die bpk Datei. Du musst aber darauf
achten im Testprojekt immer etwas zu ändern bevor du es neu startest, sonst
wird nicht die aktuelle Version deines Steuerelements eingebunden. also
am einfachsten auf der Form etwas verschieben.100% klappt das aber leider wohl nicht immer. Ich habe eine grössere Ansammlung
von Steuerelementen. Wenn ich die neu kompiliere während ein anderes Projekt offen
ist, dann bekomm ich vom Kompiler einen Zugriffsfehler (Schutzverletzung)
-
hey...ich hab nur diesen thread gefunden.
Wie benutze ich diese TImage. Wie immer werde ich aus der BCB Hilfe wieder nicht schlau...Ich will ein hintergrundbild für mein Programm

Danke für euer hilfe ich mag euch alle schon jetzt

-
ok ok ich habs gefunden
war doch einfacher als ich dachte hihihih