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 abKann 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 Formvoid __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.