Witam, mam taki oto kodzik:
w Timerze
========
Label_StatusBar.Update; //mam wrażenie że trochę pomogło, ale błąd pojawia się nadal tylko że rzadziej.
if not (Label_StatusBar.Kind.Color=RGB(255,255,255)) then Label_StatusBar.Kind.Color:=Label_StatusBar.Kind.Color+RGB(10,10,10);
if not (Label_StatusBar.Shadow.Color=RGB(0,0,0)) then Label_StatusBar.Shadow.Color:=Label_StatusBar.Shadow.Color-RGB(5,5,5);
if (Label_StatusBar.Kind.Color=RGB(255,255,255)) and (Label_StatusBar.Shadow.Color=RGB(0,0,0)) then Animation_StatusBar.Enabled:=False;
w OnEnter
=========
Label_StatusBar.Visible:=False;
Label_StatusBar.Kind.Color:=RGB(85,85,85);
Label_StatusBar.Shadow.Color:=RGB(85,85,85);
Label_StatusBar.Visible:=True;
Refresh_StatusBar.Enabled:=True; //to jest ten timer powyżej.
I teraz kilka słów wyjaśnień. Label_StatusBar to taki podrasowany label, który potrafi rzucać cień. Poprzez Kind zmieniam kolor samego napisu a przez Shadow kolor cienia.
Chcę osiągnąć taki efekt, że po najechaniu myszą w odpowiednie miejsce wyłoni się napis, ale nie w ten sposób że po prostu się pojawi, lecz coś na kształt animacji (jakby blending). Zrobiłem więc że w chwili najechania nań myszą, zmienia mu się kolor na taki jak ma tło programu (czyli w RGB 85,85,85), a potem timer stopniowo przywraca mu właściwą, barwę (255,255,255 - biały, dla napisu i 0,0,0 - czarny, dla cienia. Timer ma ustawioną szybkość na 25 milisekund. Dla cienia przeskakuje o 5 jednostek, a dla napisu o 10, bo akurat od 85 do 255 jest 170, czyli 2 razy więcej niż dla cienia który musi pokonać drogę od 85 do 0. Dlatego też napis musi zmieniać barwę 2x szybciej by była właściwa synchronizacja). Efekt jest bardzo ładny i wygląda dokładnie tak jak chciałem, ale niestety pojawia się pewien problem. Co jakiś czas (nie zawsze), podczas animacji napis na chwilę znika całkowicie a potem znów się pojawia (dosłownie na ułamek sekundy, ale jest to widoczne), a później animacja leci dalej już normalnie. Podejrzewam że jest to jakiś repaint czy refresh labela, ale nie wiem jak z tym walczyć... Co można zrobić?
PS. Ten komponent DoubleBuffer nie obsługuje.