ProgressBar zeigt Fortschritt nicht an
-
Hallo Leuts,
ich will ein Programm schreiben das mir Primzahlen bis zu einem festgelegten Maximum berechnet. Im Laufe des Arbeitens soll sich eine ProgressBar füllen und mir dadurch anzeigen, wann alle Primzahlen bis zum Maximum berechnet sind.bool test(int z) { int i; for (i=2;i<=(z-1);i++) if (z%i == 0) return false; return true; } void __fastcall TForm1::Button1Click(TObject *Sender) { int zahl; for (zahl=2;zahl<=maximum;zahl++) { ProgressBar1->StepBy(zahl/maximum); bool primzahl; primzahl = test(zahl); if (primzahl) Label1->Caption = zahl; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { maximum = 500; ProgressBar1->Max = maximum; ProgressBar1->Min = 1; }
So sieht mein bisheriger Code aus...aber leider füllt sich die ProgressBar nur zu einem kleinen Teil.
Hoffe jemand von euch kann mich auf den richtigen Weg bringen.
-
Hallo
Du must in deiner Schleife noch nach dem Setzen der ProgressBar diese zwingen diese Änderung auch wirklich noch während der Schleife anzuzeigen
ProgressBar1->StepBy(zahl/maximum); Application->ProcessMessages(); // oder ProgessBar1->Update();
bis bald
akari
-
Soo hab das ganze ausprobiert aber die ProgressBar füllt sich immernoch zu einem sehr geringen Teil und nie vollständig. Hier nochmal der aktualisierte Code
bool test(int z) //berechnet primzahlen { int i; for (i=2;i<=(z-1);i++) if (z%i == 0) return false; return true; } void __fastcall TForm1::Button1Click(TObject *Sender) { int zahl; for (zahl=2;zahl<=maximum;zahl++) { ProgressBar1->StepBy(zahl/maximum); Application->ProcessMessages(); //Die ProgressBar wird aktualisiert bool primzahl; primzahl = test(zahl); if (primzahl) Label1->Caption = zahl; //Zeigt mir bei maximum = 100 als letzte Zahl // 97 an --> fertig, ProgressBar sollte voll sein } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { maximum = 100; //Bis hierhin wird auf Primzahlen untersucht ProgressBar1->Max = maximum; ProgressBar1->Min = 0; }
-
Hallo,
du legst ein max von 100 für die Progressbar fest, teilst dann aber beim Zuweisen der Position "zahl" (z.B. 2) durch "maximum" (z.B. 100), also einen StepBy(0.02) zu -> weil StepBy aber Integer verlangt geh ich davon aus dass 0.02 = 0 ist.
mfg, Micha
//Edit: 2 / 100 is natürlich 0,02 ^^
-
ahh ja...hmm klingt logisch...gut dann werd ich mir da nochmal Gedanken machen wie ich das lösen kann...falls mir nix einfällt meld ich mich nochmal
-
Hallo
Warum willst du auch die ProgressBar so umständlich füllen?
ProgressBar1->Max = maximum; ProgressBar1->Min = 2; ProgressBar1->Position = 2; for (zahl=2;zahl<=maximum;zahl++) { ProgressBar1->StepBy(1); Application->ProcessMessages(); //Die ProgressBar wird aktualisiert ... }
bis bald
akari
-
Öhm ja gute Frage eigentlich...danke für den Tipp...so funktionierts wunderbar...bin einfach nicht drauf gekommen
Edit: Wenn ich jetzt aber den maximum Wert auf z.b. 100000 setze, ist die ProgressBar schon zu zeitig gefüllt
-
Hallo
Dann machst du irgendwas falsch, was für uns hier aber nicht ersichtlich ist. TProgressBar::Max hat jedenfalls den Platz für 2^32 Positionen.
bis bald
akari
-
hmm seh grad das ich nicht richtig hingeguckt hatte...hab die Zeilen für Min und Max einfach weggelassen.
Jetzt funktioniert alles wunderbar.
Danke Akari