ProgressBar steuern



  • Danke. Hab aber jetzt ein neues Problem wenn ich auf den Button drücke der die ProgressBar starten soll funktioniert das zwar nur hängt sich mein Programm dann auf. Ich habe wahrscheinlich einen falschen Aufruf programmiert, kannst du mir mal helfen:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
       // Funktion: Nach dem Drücken des Buttons ist die StatusBar
       // nicht mehr zu stoppen und steigt und fällt bis das Programm
       // beendet wird.
    
       int count;
    
       ProgressBar1->Min = 0;
       static int min = ProgressBar1->Min;
       ProgressBar1->Max = 20;
    
       while(count < 10)
       {
          _sleep(2);
    
         if(ProgressBar1->Position != ProgressBar1->Max)
             ProgressBar1->Position += 1;
         else
             ProgressBar1->Position -= 1;
    
         count++;
       }
    
    }
    


  • Siehe FAQ unter "Delay-/Verzögerungsfunktion".



  • Schau dir dein if/else-Konstrukt nochmal genau an...



  • achja, danke.

    Hab ich in der Eile gar nicht aufgepasst. Du dem Endpunkt kommt meine ProgressBar aber gar nicht weil count nicht größer als 10 sein darf. 🙂



  • Jetzt tut sich aber ein neues Problem auf.

    Ich hab das so wie im FAQ gemacht und das Programm stürzt nicht so wie vorher ab. Doch jetzt reagieren die anderen Elemente nicht auf meine Befehle. Ich kann also nicht einmal das Programm beenden.



  • Schon, war ja auch nurn Tip. 🙂
    Aber so macht das eh kein Sinn, dann wenn es gehen würde 🙂 , würde deine Programm in dieser Funktion festhängen und nichts anderes mehr tun. Nimm doch nen Timer oder Thread zum Anzeigen.
    Kleiner Denkanstoß:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    static int add = 1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        ProgressBar1->Max = 20;
        ProgressBar1->Min = 0;
        ProgressBar1->Position = 0;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Timer1->Enabled = !Timer1->Enabled;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        if(ProgressBar1->Position == ProgressBar1->Max ||
          (ProgressBar1->Position == ProgressBar1->Min && add != 1))
          add *= -1;
        ProgressBar1->Position += add;
    }
    //---------------------------------------------------------------------------
    


  • Sebastian Thalhammer schrieb:

    Ich hab das so wie im FAQ gemacht

    Zeig mal.



  • Danke. Dann weiss ich wie es geht. Aber ich finde den Timer bei den Komponenten nicht. Kannst du mir sagen wo der ist? Ich habe nämlich eine schlimme Befürchtung...



  • Tja ich weiss ja jetzt warum ich nichts mehr drücken kann aber ich poste mal...

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
    // Das mit der while Schleife ist jetzt belanglos   
    while(count < 100)
       {
         delay(1000);
    
         // Die Anweisungen von oben...
         count++;
       }
    
    }
    //---------------------------------------------------------------------------
    
    // Verzögerungsfunktion
    // Prototyp: void delay(int ms);
    
    void delay(int ms) // Dauer in Millisekunden
    { 
      for (int i = 0; i < ms; i += 50)
      { 
        Sleep(50);
        Application->ProcessMessages(); 
      } 
    }
    

    Mitm Timer würds gehen wenn ich in finden würde verdammt. 😡



  • Sebastian Thalhammer schrieb:

    Aber ich finde den Timer bei den Komponenten nicht.

    Das haben wir doch gerade durch!?



  • okay. alles auf mein Kommando zurück. Timer gefunden...
    Ich hab vergessen das die Komponenten mit T anfangen (TTimer).
    Ich blutiger Anfänger.... 😞

    Danke für deine Hilfe du hast mich echt weitergebracht Jansen.



  • Sebastian Thalhammer schrieb:

    // Die Anweisungen von oben...

    Wirklich hilfreich ist das nicht, schliesslich steht "oben" eine ganze Menge Code.


Anmelden zum Antworten