Prozentzahl



  • oder du verwendest statt TProgressBar CGauge (aus Gruppe Beispiele). Da steht der Prozentwert schon drin. Ich weis jetzt aber nicht ob deise Komponente bei allen Builder-Versionen dabei ist.

    Ciao



  • naja gut, wenn du schon nicht weißt, ob diese kompo bei allen versionen dabei ist, dann wird sie wohl kaum bei meiner dabei sein.
    die wunderbare museeums-version 😞



  • Bj schrieb:

    dachte da gäbe es vielleicht auch etwas im builder selber.

    Der Builder ist kein Compile-O-Mat, da musst du schon noch selber etwas Arbeit reinstecken (o;

    -junix



  • Braunstein schrieb:

    oder du verwendest statt TProgressBar CGauge (aus Gruppe Beispiele)...

    Ohh... nein, lieber nicht! 🙂

    @Bj
    damit du ein paar fragen sparst:
    ProgressBar->Min ==> CGauge->MinValue,
    ProgressBar->Max ==> CGauge->MaxValue,
    ProgressBar->Position ==> CGauge->Progress,...

    🙂



  • ich weiß, anfänger sidn nervig 😉

    CGauge, aha, wie ich dein posting verstehe, wäre ProgressBar->Min gleich CGauge->MinValue.
    usw...

    * in HILFE nachschau *
    * nix gefunden * 😮

    aber wo bekomme ich denn CGauge her? 🙂
    und was ist das überhaupt?



  • In der Hilfe steht dazu auch nix. Das ist eine Beispielkomponente die oben in der Komponentenpalette unter Beispiele zu finden ist. Zumindest bei Builder 4 und 5 (ich hatte zwar auch mal 1 und 3 kann mich aber nicht mehr erinnern ob es sowas da schon gab).



  • *vergeblich such nach bepielen*

    in der komponentenliste gibt es bei mir keinen punkt "beispiele"

    mhhh, aber ich versuchte es anders.

    Form1 -> lb_prozent -> Caption = String (anzahl_eintraege / azaehler *100);
    // anzahl_eintraege = gesamt
    // azaehler = ändert sich immer
    

    denke mal die rechnung ist korreckt.
    aber während des durchlaufs zeigt er auf dem label natürlich nix an.
    schafft das programm das nicht?
    nur zum schluss steht da:
    100 prozent.
    naja aber diese codezeile steht in der schleife selber drin.
    ändert sich wohl immer so schnell das man nix mehr erkennen kann, gell?
    was soll ich denn jetzt tun?

    thx
    Bj



  • suchen: Stichwort: 'ProcessMessages'



  • Bj schrieb:

    denke mal die rechnung ist korreckt.

    Sicher? Mir war da noch was bezüglich Punkt vor Strich regeln und so...

    Ahja:
    http://c-plusplus.net/forum/viewtopic.php?t=9815

    -junix



  • punkt vor strich?
    da gibt es nur divison und multiplikation.
    ich sehe nicht wo dann in dieser rechnung da problem sein soll 🙂

    danke für den link 🙂



  • WARUM KLAPPT DAS DENN NOCH NICHT?

    int prozent = (azaehler/anzahl_eintraege)*100;
    // azaehler: 1......max
    // anzahl_einträge: max
    Application->ProcessMessages();
    Form1 -> lb_prozent -> Caption = String(prozent);
    

    was ist denn daran falsch? 😡
    es läuft auch, aber er zeigt die ganzen 20 sekunden die die schleife durchläuft immer 0 an, und zum schluss 100.

    da ist doch kein fehler drin!???!?!??!

    Bj 😡



  • Oh, Man!

    int prozent = (azaehler/anzahl_eintraege)*100; 
    // azaehler: 1......max 
    // anzahl_einträge: max 
    Form1->lb_prozent->Caption = String(prozent);
    Application->ProcessMessages();
    


  • so geht es leider auch nicht! 😡
    du hast ja
    Application->ProcessMessages();
    nur dahinter geschrieben!

    aber so zeigt er während der lauzeit auch nur 0 an, und wenn die schleide durchlaufen ist, 100.

    was stimmt denn da noch nicht?

    thx
    Bj



  • zeige doch mal dein code



  • Vermutlich ergibt diese Teilrechnung: (azaehler/anzahl_eintraege) eine Zahl < 1. (logisch) da du aber nur mit Integerzahlen rechnest und diese keine Kommastellen haben, werden diese abgeschnitten und durch 0.x wird 0. 0 x 100 = 0. Soviel zur Mathematik.

    Was du nun tun kannst ist, den einen faktor (azaehler) VOR dem Teilen mit 100 zu multiplizieren und anschliessend erst durch anzahl_eintraege zu dividieren... dann dürfte das Ergebnis wohl den gewünschten effekt zeigen.

    -junix



  • int prozent = ((azaehler/anzahl_eintraege)*100);
    Form1 -> lb_prozent -> Caption = String(prozent);
    Application->ProcessMessages();
    

    Wobei ich zur laufzeit auch die variablen überprüft habe, welche aber stimmen.
    azaehler: zählt immer weiter hoch.
    anzahl_einträge: dort steht immer 3376 drin.

    dort müsste doch alles stimmen?
    trotzdem errechnet er immer 0.

    thx
    Bj



  • zusammen mit der schleife



  • @ junix.
    so funktioniert es.
    aber habe es übrigens auch schon mit float versucht, kommt aber aufs selbe raus. warum denn das? dort ist dein oben beschriebenes problem ja nicht.
    aber ist es nicht sp??:
    er rechnet die divison, die unter 0 ist, dann multipliziert mit 100, und was dort herauskommt schneidet er erst hinter dem komma ab?!?

    also warum funktioniert das alles nicht mit float?



  • aber habe es übrigens auch schon mit float versucht, [...] dort ist dein oben beschriebenes problem ja nicht.

    Irrtum. Der Cast nach Float passiert erst im Moment der Zuweisung zu einem Float. Solange du keine Floatzahlen in der Rechnung hast, ist ihm das ziemlich wurscht.

    -junix



  • aber was ich nicht verstehe ist:

    so funktioniert es:
    float prozent = (azaehler*100)/anzahl_eintraege;

    aber so nicht:
    *float prozent = (azaehler/anzahl_eintraege)100;

    obwohl das doch praktisch gesehen die selbe rechnung ist!!!???


Anmelden zum Antworten