ProgressBar beschädigt Panel



  • Guten Morgen,
    ich setze ein großes Panel und einen Button auf eine Form. Eine ProgressBar erzeuge ich dynamisch, so dass sie zentriert in Höhe und Breite (Luft außen herum) auf dem Panel liegt. Wenn ich das unten gezeigte Beispiel starte, kratzt mir die ProgressBar den oberen linken Rand meines Panels ab 😕

    Kann jemand sagen, wie ich das abstelle, oder habe ich etwas übersehen?

    Spielereien mit den Anchors habe ich bereits durchgeführt, leider ohne Wirkung.
    Arbeite mit Builder2009

    // h
    class TForm1 : public TForm {
    __published:	// IDE-verwaltete Komponenten
      TButton *Button1;
      TPanel *Panel1;
      void __fastcall Button1Click(TObject *Sender);
    private:	// Benutzer Deklarationen
    public:	 // Benutzer Deklarationen
      __fastcall TForm1(TComponent* Owner);
    };
    
    // cpp
    void __fastcall TForm1::Button1Click(TObject *Sender){
      TProgressBar* pgb = new TProgressBar(Panel1);
      pgb->Parent = Panel1;
      pgb->Top = 70;
      pgb->Left = 100;
      pgb->Width = 200;
      pgb->Height = 20;
      pgb->Min = 0;
      pgb->Max = 1000000;
      for (Longint i = pgb->Min; i <= pgb->Max; i++)
        pgb->Position = i;
      Sleep(3000);
      delete pgb;
      pgb = NULL;
    }
    


  • das kommt dadurch, dass der ProgressBar erst oben links gezeichnet wird, dann nach unten und nach rechts verschoben wird

    du kannst 2 Möglichkeiten zur Problemlösung verwenden:
    Variante 1: zeigt den Progressbar erst wenn er fertig eingerichtet ist
    Variante 2: "Aktualisiert" einfach das Form

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	TProgressBar* pgb = new TProgressBar(Panel1);
    	pgb->Visible = false;            //--> Variante 1
    	pgb->Parent = Panel1;
    	pgb->Top = 70;
    	pgb->Left = 100;
    	pgb->Width = 200;
    	pgb->Height = 20;
    	pgb->Min = 0;
    	pgb->Max = 1000000;
    	pgb->Visible = true;            //--> Variante 1
    	//Application->ProcessMessages();     //--> Variante 2
    	for (Longint i = pgb->Min; i <= pgb->Max; i++)
    		pgb->Position = i;
    	Sleep(3000);
    	delete pgb;
    	pgb = NULL;
    }
    


  • Danke @Linnea, so macht das Spaß 👍

    Deinen Hinweis habe bereits mit "pgb->Visible" eingearbeitet, der Fehler ist jetzt verschwunden.
    Deine Analyse erklärt auch gut, warum neben der fehlerhaften Ecke oben links eine Lücke im Rand links durch die vertikale Verschiebung entsteht.


Anmelden zum Antworten