Hola, este ejemplo usa un paintbox
Código Delphi
[-]
procedure TForm1.Gradient(cl,ds : TColor; perc : double);
var
ri,gi,bi : integer;
rf,gf,bf : integer;
pr,pg,pb : double;
r,g,b : integer;
y : integer;
c : TColor;
s : string;
wp : integer;
begin
with PaintBox1 do
begin
ri := (cl and $FF);
gi := (cl and $FF00) div $100;
bi := (cl and $FF0000) div $10000;
rf := (ds and $FF);
gf := (ds and $FF00) div $100;
bf := (ds and $FF0000) div $10000;
pr := (rf - ri) / (Height/2);
pg := (gf - gi) / (Height/2);
pb := (bf - bi) / (Height/2);
wp := Round(Width*perc/100);
c := 0;
for y := 0 to (Height div 2) do
begin
r := ri + round(pr * y);
g := gi + round(pg * y);
b := bi + round(pb * y);
c := RGB(r,g,b);
Canvas.Pen.Color := c;
Canvas.MoveTo(0,y);
Canvas.LineTo(wp,y);
Canvas.Moveto(0,Height-y);
Canvas.LineTo(wp,Height - y);
end;
s := formatFloat('0.00%',perc);
canvas.Brush.style := bsSolid;
canvas.brush.color := clBlack;
canvas.FillRect(Rect(wp,0,Width,Height));
canvas.Brush.style := bsClear;
canvas.Font.Color := ($00FFFFFF) xor canvas.Pixels[Width div 2,Height div 2];
canvas.Textout((width - Canvas.Textwidth(s))div 2,(Height - Canvas.TextHeight(s)) div 2,s);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
doublebuffered := true;
PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width,PaintBox1.Height));
PaintBox1.Canvas.Brush.Style := bsClear;
PaintBox1.Canvas.Font.Style := [fsBold];
for i := 0 to 10000 do
Gradient($00FF0000,$00FFFFFF,i/100);
end;
podrias crear un componente a medida poniendo eso en el evento onpaint. Vamos, que es solo un ejemplo, que se puede mejorar bastante.