String "herunterzählen" (war: Anfänger braucht hilfe)



  • Hi Leute,
    ich habe ein Problem...habe die ganze Zeit nur im VB programmiert und bin jetzt zu c++ umgestiegen.
    Ich will in einem Label Zahlen runterzählen lassen von 25 bis null. Wenn die Null erreicht ist soll der Timer stoppen.
    Ich habe das ganze schon mal so versucht.

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Label3->Caption=Label3->Caption -1;
      {
        if (Label3=0);
    	Timer1->Enabled=false;
      }
    }
    

    Wie mache ich es richtig? 😡

    Edit:
    Bitte aussagekräftige Überschriften wählen und die Code-Tags benutzen. Danke!



  • vergleiche macht man mit == nicht mit =



  • 1. einen Aussagekräftige Überschrift wählen
    2. die Caption ist ein String, den kannst du nicht einfach so runterzählen
    3. Vergleiche werden mit einem doppel = durchgeführt

    void __fastcall TForm1::Timer1Timer(TObject *Sender) 
    { int wert = StrToInt(Label3->Caption) - 1;
      Label3->Caption = IntToStr(wert); 
      if (wert==0) Timer1->Enabled = false; 
    }
    


  • void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        Zaehler -= 1;
        Label1->Caption = IntToStr(Zaehler):
    
        if (Zaehler == 0);
            Timer1->Enabled=false;
    
    }
    

    setz den Zaehler im konstrucktor auf 25 und starte dann den timer



  • habe ich gerade probiert aber er zählt immer nur bis zur vier

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Label3->Caption=Label3->Caption -1;
    {
    if (Label3==0);
    Timer1->Enabled=false;
    }
    }

    was stimmt hier nicht



  • Sisco schrieb:

    Wie mache ich es richtig? 😡

    Indem du dir erst mal die C(++) Grundlagen zu Gemüte führst.

    -junix



  • Sisco schrieb:

    was stimmt hier nicht

    1. Hast du wieder keine Code-Tags verwendet (gugg dir mal den C/C++-Button unter dem Eingabefeld an)
    2. Vergleiche deine Lösung mit den Lösungen die oben gepostet wurden
    3. Siehe obigen Post von mir.

    -junix



  • Ich bedanke mich



  • Sisco schrieb:

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Label3->Caption=Label3->Caption -1;
      {
      if (Label3==0);
    	Timer1->Enabled=false;
      }
    }
    

    Entgegen VB wird in C++ normalerweise nicht automatisch eine Typkonvertierung
    durchgeführt.
    Die Code-Zeile

    Label3->Caption=Label3->Caption -1;
    

    funktioniert deshalb nicht. Du mußt erst das was in Caption steht in einen
    Zahlenwert umwandeln, z.B. mit StrToInt(), und anschließend diesen Zahlen-
    wert (nach Umwandlung in einen String, z.B. mit IntToStr()) wieder der
    Caption zuweisen.

    Gruß,

    Alexander



  • Alexander Kempf schrieb:

    Entgegen VB wird in C++ normalerweise nicht automatisch eine Typkonvertierung durchgeführt.

    Vorausgesetzt du überlädst den Operator - von AnsiString, ist das durchaus möglich. Allerdings bin ich mir grad nicht sicher ob das Built-In verfügbar ist.

    -junix



  • junix schrieb:

    Vorausgesetzt du überlädst den Operator - von AnsiString, ist das durchaus möglich.

    Wobei der Tip für einen erklärten Anfänger vermutlich wenig hilfreich sein
    dürfte. 🙂

    Gruß,

    Alexander



  • erstaunlicherweise funzt die zeile bei mir

    Label1->Caption=Label1->Caption - 1;
    

    würde trotzdem zu einer Typkonvertierung raten


Anmelden zum Antworten