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