Kleines Kreischen malen
-
Nicht, bevor nicht zu erkennen ist, dass du dir selbst ein paar Gedanken gemacht hast ...
-
Na so behandelt man aber keine Damen
Aber ok, ich versuchs!
Tschüssiii
-
this->Canvas->Pen->Color = clWhite; this->Canvas->Rectangle(0,0, 10,10); this->Canvas->Refresh();
Müsste so nicht ein kleines weißes Rechteck auf dem Label entstehen?
Tut es nicht. Es passiert gar nichts
-
Für Flächen nimm Brush statt Pen.
Und this sollte auch wirklich auf das Label zeigen.
Und dann kommte es auch noch darauf an, an welcher Stelle du das Ganze aufrufst.
-
Ich rufe das im Konstruktor einer von TLabel abgeleiteten Klasse auf.
Brush macht keinen Unterschied, also denke ich, dass ich was anderes falsch macheclass Feld : public TLabel { public: __fastcall Feld(AnsiString name, //Name des Felds TComponent* Owner, //Objektbesitzer TWinControl* parent, //Elternelement unsigned int width, //Breite unsigned int height, //Höhe unsigned int top, //y-Koordinate unsigned int left) : TLabel(Owner) //Konstrukturaufruf von TLabel { this->Color = cl; this->AutoSize = false; //Das Feld soll sich nicht dem Inhalt anpassen this->Font->Color = clWhite; this->Parent = parent; this->Caption = " "; //Auf dem Feld soll nichts stehen this->ShowHint = true; //Hinweis beim Überfahren mit der Maus: ja this->Hint = "Leeres Feld"; //Standarttext des Hinweises this->Top = top; this->Left = left; this->Width = width; this->Height = height; this->Canvas->Pen->Color = clBlack; this->Canvas->Brush->Color = clBlack; this->Canvas->Rectangle(5,5, 10,10); this->Canvas->Refresh(); this->Repaint(); this->Refresh(); } };
-
Hallo,
wie erzeugst du das Feld?
Beispiel:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { feld = new Feld( "feld1", // AnsiString name, //Name des Felds this, // TComponent* Owner, //Objektbesitzer Form1, // TWinControl* parent, //Elternelement 40, // unsigned int width, //Breite 40, // unsigned int height, //Höhe 20, // unsigned int top, //y-Koordinate 20); // unsigned int left; } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1(void) { delete feld; }
-
So wie du:
this->array[x][y] = new Feld("x" + IntToStr(x) + "_y" + IntToStr(y), //Feldname Owner, parent, //Besitzer und Vater width, height, //Maße des Felds y*top, x*left //Koordinaten des Felds );
Ist das falsch so?
-
Owner, parent sind bei dir (für uns nicht ersichtlich) nicht belegt.
Um herauszubekommen, obs überhaupt erzeugt wird, setze einfach was in die Caption.
-
Ja, das wird erzeugt.
Die Labels sind da und werden angezeigt.Owner ist bei mir TForm1 und parent ist ein Panel auf TForm1
-
Dann sollte es gehen.
was ist this->Color = cl ( wie ist die Farbe definiert, ist da ein Fehler?)...
-
wenn du das im Konstruktor aufrufst, bringt dir das aber nichts, da dort das gezeichnete vergessen wird. Normalerweise ruft man sowas im OnPaint Event auf (wenn das Objekt sowas bietet)
greetz KN4CK3R
-
Hi,
This->Color passt. da ist nur beim kopieren hier rein was schief gelaufen.
Und onPaint bietet TLabel leider nicht
Hmm, eines habe ich vergessen zu erwähnen. Wenn ich mit Canvas zeichne, dann "klappt" das Label zusammen. Also es hat dann keine Ausmaße mehr.
Wenn ich dann das Fenster resize, dann sind sie wieder da.
-
Autosize = false!!
ed
Nee, hast du ja ...
-
Auch mit true ändert sich nix
Ist vieleicht TLabel einfach nur ungeeignet? Was empfiehlt sich da?
-
Hab dein Beispiel nachgebaut, also hier läufts ( ohne dein Array).
Ändert sich width/height?
TPaintBox ginge auch.
-
Kannst du mal deinen Code zeigen?
Width/Height setze ich eigentlich nur direkt im Konstruktor. Von daher verstehe ich nciht, warum das "zusammenklappt"
-
Die Klasse ist so übernommen wie bei deinem Posting.
im Header des Forms steht lediglich noch
private: Feld* feld; public: __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(void);
Naja, Zeiger und Destruktor.
Restlicher Code s. oben
Bei Programmstart ist ein rotes Quadrat gezeichnet.
-
Sehr seltsam
An was könnte das denn noch liegen?
Selbst wenn ich das Objekt von außerhalb "bezeichne", als nach dem Konstruktor, ist es plötzlich auf 0x0px geklappt. Und wenn ich das Fenster groß ziehe, ist trotzdem nix drauf gezeichnet
-
Überprüfe einfach mal mit dem Debugger die Werte Width und Height.
-
Passt alles...
Also ich bin ratlos