еще способ попробуй как вариант сделать не переход одного цвета а например сразу всех смешивание
я не пробовал вроде работало... не помню точно
вот приколная градиентная рамочка кому мож пригодитца
Procedure ramka(tp:integer);
Var i:integer;
Begin
for i:= 0 to 4 do begin
if tp = 0 then setcolor(190+i*10,190-i*10,i*5+55);
if tp = 1 then setcolor(110-i*20,110-i*20,110-i*20);
DrawRect(i,i,getWidth-5,getHeight-5);
end;
end;
вот градиеные эфекты заполнения екрана типа финиш старт.. тп
procedure coolClear(tp:integer);
Var i,j,w,h:integer;
jm:real;
begin
//setcolor(random(255),random(255),random(255));
setcolor(0,0,0);
jm:=254/(getHeight/2);
For i:= 0 to getHeight/2 do begin
//setcolor(50+i*2,50+i*2,50+i*2);
if (tp=1)or(tp=3) then setcolor(trunc(i*jm),trunc(i*jm),trunc(i*jm));
DrawRect(i,i,getWidth-i*2,getHeight-i*2);
//DrawEllipse(0,0,i,i);
if tp<>3 then if Odd(i) then repaint;
//delay(10);
end;
end;