Cześć, mam taki oto problem.
Chcę "rozbłysnąć" od białego koloru do zadanego.
Mam nadzieję, że wiecie o co mi chodzi, a jeśli nie, to wątpliwości powinien rozwiać mój kod:
c:=colorToRgb(zadany_kolor);
jr:=Byte(c);
jg:=Byte(c shr 8);
jb:=Byte(c shr 16);
while (panel1.Color<>zadany_kolor) or (FStart) do
begin
if FStart then
begin
r:=255; g:=255; b:=255;
FStart:=false;
end;
if r>jr then r:=r-1;
if g>jg then g:=g-1;
if b>jb then b:=b-1;
panel1.Color:=Rgb(r, g, b);
Application.ProcessMessages;
end;
jr, jg i jb to składowe rgb koloru, jaki mam osiągnąć.
r, g, b to składowe aktualnego koloru.
No i niby wszystko ładnie chodzi, ale problem polega na tym, że pętla bez żadnego zwolnienia działa za szybko i nie widać "rozbłyśnięcia", tylko błyśnięcie: biały - zadany.
Jeśli wrzucę tam sleep(1) to znowu jest trochę za wolno. Jeśli np. kolorem zadanym jest niebieski, no to wtedy to trochę trwa.
Timer rzecz jasna w ogóle odpada, bo jest za wolny.
Da się zrobić coś, żeby to było szybciej niż sleep(1), ale wolniej niż bez żadnego opóźnienia? :D
Myślałem też nad "licznikiem", czyli pętlą w stylu:
while i<1000 do i:=i+1;
ale to chyba złe rozwiązanie.
A może robi się takie rzeczy jakoś inaczej?</delphi>