Regenbogenfarben; flackerndes Label



  • Hallo zusammen in meinem programm soll sich die Farbe eines Labels dauernd verändern und zwar fließend das habe ich mit diesem Code versucht

    void __fastcall TForm1::Label1Click(TObject *Sender)
    {
    for (int a = 0; a < 50; a++)
    {
    Sleep(50);
    Label1->Color = 0 + a;
    }
    }
    

    Wenn ich jetzt auf das Label klicke dann passiert eine Weile nix bis dann das Label
    eine dunkelrot Farbe annimmt(Die Farbe is dabei ja au logisch) Nur wieso wird dazwischen das Label nicht angezeigt?????

    Big Thx im voraus
    Straightflush



  • Hallo

    mach nach jedem Sleep ein

    Application->ProcessMessages();
    

    bis bald
    akari



  • Danke jetzt gehts!!!
    Leider hör es erst auf wenn es komplett durchgelaufen is...
    was kann ich da dagegen machen? also das man es z.B. mit nem Knopfdruck beenden kann?



  • Hallo

    dazu brauchst du erstmal eine Member-Variable des Forms, die du im Header unter private deklarierst. In meinem Beispiel nenne ich diese

    bool iStop;
    

    Dann hast du einen Button o.ö., der den Verlauf abbrechen soll:

    void __fastcall Form1ButtonAbortClick(TObject *Sender)
    {
      iStop = true;
      }
    

    Nun kannst du in der Verlaufsschleife diese Variable abfragen

    void __fastcall TForm1::Label1Click(TObject *Sender)
    {
      iStop = false;
      for (int a = 0; a < 50 && iStop == false; a++)
      {
        Sleep(50);
        Application->ProcessMessages();
        Label1->Color = 0 + a;
        }
      }
    

    Das liese sich im ganzen aber auch mit einem Timer auch eleganter lösen.

    bis bald
    akari


Anmelden zum Antworten