Kleines Kreischen malen
-
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
-
Eventuell solltest du nun doch etwas mehr posten, vllt. kommen wir der Sache auf die Spur.
mfg
kpeter
-
Ja also ich habe jetzt noch ein bisschen herumprobiert.
Habe ein Label erstellt und das versucht:
this->lb->Canvas->Pen->Color = clBlack; this->lb->Canvas->Brush->Color = clBlack; this->lb->Canvas->Rectangle(5,5, 10,10); this->lb->Canvas->Refresh(); this->lb->Repaint(); this->lb->Refresh();
Es passiert: NICHTS
Ist mein ganzes Projekt kaputt oder wie? find ich sehr sehr komisch...
Was mich auch gewunder hat, ist, dass der Borland Builder das neue Label nicht autmoatisch in die Klassendefinition eingefügt hat:
TLabel *lb;
musste ich selbst in TForm1 einfügen.
Also sieht es so aus, als sei mein Compiler irgendwie kaputt?
-
Selbst in einem neuen Projekt tut sich so überhaupt nix:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { this->lb->Canvas->Pen->Color = clBlack; this->lb->Canvas->Brush->Color = clBlack; this->lb->Canvas->Rectangle(5,5, 10,10); this->lb->Canvas->Refresh(); this->lb->Repaint(); this->lb->Refresh(); } //---------------------------------------------------------------------------
-
Du zeichnest von Hand in dein Label und überzeichnest es nachher, indem du die automatische Paint-Funktion der Komponente aufrufst?
-
Also falls noch einem was einfällt, dann wäre ich wirklich sehr dankbar!
Ich geh jetzt erstmal ins Bettechen. Machts gut!
-
Da haben wir wohl gleichzeitig geschrieben.
Wenn ich repaint() rausnehme, geschieht immer noch nichts
-
void __fastcall TForm4::Button1Click(TObject *Sender) { this->lb->Canvas->Pen->Color = clBlack; this->lb->Canvas->Brush->Color = clBlack; this->lb->Canvas->Rectangle(1,1, 5,5); }
funtioniert bei mir wunderbar
Das problem ist aber, dass Label ein dynamisch-"komisches" verhalten der grösse (width-height) hat.. deshalb bei mir gefüllt mitlb->Caption = " ."
halt testweise
-
Sehr sehr seltsam.
Dein Beispiel funktioniert!
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { this->lb->Canvas->Pen->Color = clBlack; this->lb->Canvas->Brush->Color = clBlack; this->lb->Canvas->Rectangle(1,1, 5,5); } //---------------------------------------------------------------------------
Nur direkt in FormCreate() geht es nicht. Warum nicht?
Vielleicht ist das auch die Lösung meines Problems. Ich muss mal schauen...
Weil letztendlich passiert das bei mir alles in FormCreate (Dort wird der Controller erzeugt, der dann das Model mit den Labels erzeugt, usw.)
-
Das mit der größe und der Caption lässt sich übrigens mit AutoSize = false lösen. So passt es bei mir dann.
Trotzdem würde mich jetzt noch interessieren, warum das in FormCreate nicht geht
-
Ich denke mal, dass >NACH< FormCreate ein Repaint() oder ähnliches kommt.
Danach sind deine sachen überzeichnet. Am besten dafür ein OnPaint-Erreignis nutzen oder Message abfangen.Da zB nach Minimieren und wieder Maximieren oder Fenster darüber ziehen (Einfach, dass das Label neu gezeichnet werden muss) ist dein Rechteck weg.