procedure DrawGradientH(Canvas: TCanvas; Color1, Color2: TColor; Rect: TRect);
var
X, R, G, B: Integer;
begin
for X := Rect.Top
to Rect.Bottom
do begin
R := Round(GetRValue(Color1) + ((GetRValue(Color2) - GetRValue(Color1)) *
X / (Rect.Bottom - Rect.Top)));
G := Round(GetGValue(Color1) + ((GetGValue(Color2) - GetGValue(Color1)) *
X / (Rect.Bottom - Rect.Top)));
B := Round(GetBValue(Color1) + ((GetBValue(Color2) - GetBValue(Color1)) *
X / (Rect.Bottom - Rect.Top)));
Canvas.Pen.Color :=
RGB(R, G, B);
Canvas.Pen.Width := 1;
Canvas.Pen.Style := psInsideFrame;
Canvas.MoveTo(Rect.Left, X);
Canvas.LineTo(Rect.Right, X);
end;
end;
function ColorMix(Color1, Color2: TColor;
Index, Count: Word): TColor;
var
R, G, B: Integer;
begin
if Index > Count
then
Index := Count;
R := Round(GetRValue(Color1) + ((GetRValue(Color2) - GetRValue(Color1)) *
Index / Count));
G := Round(GetGValue(Color1) + ((GetGValue(Color2) - GetGValue(Color1)) *
Index / Count));
B := Round(GetBValue(Color1) + ((GetBValue(Color2) - GetBValue(Color1)) *
Index / Count));
Result :=
RGB(R, G, B);
end;
var
Col1, Col2, Col3, Col4: TColor;
procedure TForm1.Timer1Timer(Sender: TObject);
const
Count = 100;
begin
with Sender
as TTimer
do
begin
Interval := 1;
if Tag = 0
then
begin
Col2 :=
RGB(Random(256), Random(256), Random(256));
Col4 :=
RGB(Random(256), Random(256), Random(256));
end;
DrawGradientH(Canvas, ColorMix(Col1, Col2, Tag, Count), ColorMix(Col3, Col4, Tag, Count), Canvas.ClipRect);
Tag := Tag + 1;
if Tag > Count
then
begin
Tag := 0;
Col1 := Col2;
Col3 := Col4;
end;
end;
end;