TProgressBar Max



  • es geht dabei um bytes und nicht um incrementale durchläufe.

    += 1421
    += 6433
    += 1043

    etc. aber warum ist es nun möglich?



  • Und, wo ist das Problem?

    Rechne Dir doch einfach die gelesen Bytes in Prozent um. Dann setzt Du Max der ProgressBar auf 100 und weist den Prozentwert als aktuelle Position zu.



  • hey! das ist garnicht mal so übel 🙂 wie kann ich die werte in prozent umrechnen? also ich weis immer wieviel dazu kommt, der wet kann kleiner als der zuvor sein oder grösser oder gleich. wie errechne ich nun davon das prozent dass dazu kommt? einfach:

    totaler_wert / dazukomender_wert * 100 = prozent_um_position_zu_setzen?



  • dazukomender_wert => Anzahl bereits gelesener Bytes

    Edit: 100 * Anzahl bereits gelesener Bytes / Total zu lesende Menge



  • Hallo

    Prozentrechnung lernt man doch schon in der Grundschule...

    bis bald
    akari



  • also ich versuche es gerade so:

    Progress->Position += ((float)complete_data_size / (float)data_differents) * 100;
    

    leider ohne erfolg. ich habe zwei progressbar's wobei eine für den aktuellen download status bereit steht und die andere für den kompletten. die erste progressbar funktioniert ohne probleme mit der prozent umrechnung. die zweite, also die, die den totalen download fortschritt anzeigen soll, eben nicht.

    unter IdHTTPWork errechne ich die bytes die von der aktuellen datei jeweils im durchlauf runtergeladen wurden, hald eben die differenz. AWorkCount liefert mir bei dieser methode die bytes, die insgesamt von der aktuellen datei runtergeladen wurden. dann habe ich eben noch meine variable complete_data_size, die als wert von sämtlichen dateien die bytes enthält. das sieht nun so aus:

    void __fastcall TfrmMain::IdHTTPWork(TObject *Sender, TWorkMode AWorkMode,
    	  const int AWorkCount)
    {
    	data_differents = AWorkCount - data_differents;
    	Application->ProcessMessages();
    
    	Position = ((float)AWorkCount / (float)max_bytes) * 100;
    	Progress->Position += ((float)complete_data_size / (float)data_differents) * 100;
    
    	data_differents = AWorkCount;
    }
    

    ich muss ja der zweiten progressbar jeweils den wert dazu addieren weil sonst habe ich entweder das gleiche wie mit der ersten progressbar oder aber ein total falsches ergebnis da ja complete_data_size erst einmal erreicht werden muss und zwar von allen datei downloads.



  • Lädst Du mehrere Dateien parallel herunter?
    Vermutlich nicht, also warum sich die Sache schwerer als nötig machen... Für die zweite ProgressBar reicht es doch völlig, die Anzahl der insgesamt zu übertragenden Dateien zu wissen. Die Anzahl der Bytes ist doch irrelevant. Wenn Du zB sieben Dateien herunterlädst, stellst Du Max der zweiten ProgressBar auf 7 und stepst die Position eins weiter für jede Datei, die Du fertig gelesen hast.



  • das schon ja, aber dann sieht es (sorry) doof aus wenn sich die zweite progressbar steppt. die erste läuft ja schön im fluss durch. die zweite würde dann steppend ausschauen. verstehst du was ich meine?

    was ich möchte müsste doch möglich sein oder nicht?



  • Dann musst Du es eben exakt so, wie mit der ersten ProgressBar machen. Nur dass eben andere Werte zu Grunde liegen. In diesem Fall dann eben Gesamtsumme Bytes aller Dateien und Gesamtsumme der bisher übertragenen Bytes. Wieder in Prozent umrechnen und fertig.

    Mich persönlich würde es nicht stören, wenn die zweite ProgressBar nicht flüssig läuft. Du hast ja schließliche die erste ProgressBar um den Status der einzelnen Dateien anzuzeigen. Wozu also das gleiche noch mal bei der zweiten ProgressBar? Dann würde ich auf die erste ProgressBar verzichten...



  • danke 😋


Anmelden zum Antworten