Kleines Kreischen malen



  • 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 mit

    lb->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.



  • Hallo

    Ja, das hab ich ja schon von Anfang an gesagt : TLabel hat kein OnPaint-Event, also sind alle Zeichnung flüchtig. Verwende TImage oder TPaintBox anstelle des TLabels, und zeichne eben auch noch den Text selber.

    Die Alternative, bei TLabel noch zusätzlich die eintsprechende WinAPI-Message abzufangen und sozusagen selber einen OnPaint-Event zu erzeugen, ist für Anfänger nur noch undurchschaubarer und komplizierter.

    bis bald
    akari



  • Hallo,

    und ich muss meine Festellung im obigen Post zurückziehen.
    Die Farbeinstellung im Konstruktor sorgt eigentlich nur für die Hintergrundfarbe des Labels und war kein Canvas->Rectangle...
    War wohl gestern 'n langer Tag für mich.

    *EimerAscheüberdenKopfkipp* 🙄


Anmelden zum Antworten