fbpx

Criando um efeito degradê de cores

Criando um efeito degradê de cores

Esta dica mostra como criar um efeito degradê em um Canvas qualquer.
Neste caso, estamos utilizando um componente TPaintBox e o evento OnPaint. Dependendo da utilização deste recurso, esta rotina pode ser adaptada para funcionar em um outro componente.

procedure TForm1.PaintBox1Paint(Sender: TObject);
const
clStart: TColor = clRed;
clEnd: TColor = clBlack;
var
ACanvas: TCanvas;
ARect: TRect;
i : Integer;
rc, gc, bc, h: Integer;
begin

ACanvas := PaintBox1.Canvas;
ARect := PaintBox1.ClientRect;

h := ARect.Bottom – ARect.Top;

{ desenha o degradê }
for i := 0 to (ARect.Bottom – ARect.Top) do
begin
rc := GetRValue(clStart);
gc := GetGValue(clStart);
bc := GetBValue(clStart);
rc := rc + (((GetRValue(clEnd) – rc) * (ARect.Top + i)) div h);
gc := gc + (((GetGValue(clEnd) – gc) * (ARect.Top + i)) div h);
bc := bc + (((GetBValue(clEnd) – bc) * (ARect.Top + i)) div h);
ACanvas.Brush.Style := bsSolid;
ACanvas.Brush.Color := RGB(rc, gc, bc);
ACanvas.FillRect(Rect(ARect.Left, ARect.Top + i, ARect.Right, ARect.Top + i + 1));
end;

end;

Compartilhe esta matéria
  , ,


Um Comentário em “Criando um efeito degradê de cores

  1. Renato,

    Tentei compilar este artigo, usando o Delphi XE7, mas surgiu estes erros abaixo:

    [dcc32 Error] Unit1.pas(40): E2066 Missing operator or semicolon
    [dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type ‘Integer’ found
    [dcc32 Error] Unit1.pas(43): E2029 ‘)’ expected but identifier ‘–’ found
    [dcc32 Error] Unit1.pas(48): E2029 ‘)’ expected but identifier ‘–’ found
    [dcc32 Error] Unit1.pas(56): E2029 ‘.’ expected but ‘;’ found
    [dcc32 Fatal Error] Project1.dpr(5): F2063 Could not compile used unit ‘Unit1.pas’
    Failed
    Elapsed time: 00:00:00.1

    O que pode ser?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.