Градиентная заливка формы

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Говорят, в Windows 95 дружественный интерфейс. Hо почему учебник на 1000 страниц?!

Процедура GradientRect делает градиентную заливку (сверху в низ). Параметры: цвета [от и до] и объект Canvas, поверхность которого и будет закрашена

procedure TForm1.GradientRect (FromRGB, ToRGB: TColor; Canvas: TCanvas);

var

RGBFrom : array[0..2] of Byte; { from RGB values }

RGBDiff : array[0..2] of integer; { difference of from/to RGB values }

ColorBand : TRect; { color band rectangular coordinates }

I : Integer; { color band index }

R : Byte; { a color band’s R value }

G : Byte; { a color band’s G value }

B : Byte; { a color band’s B value }

begin

{ extract from RGB values}

RGBFrom[0] := GetRValue (ColorToRGB (FromRGB));

RGBFrom[1] := GetGValue (ColorToRGB (FromRGB));

RGBFrom[2] := GetBValue (ColorToRGB (FromRGB));

{ calculate difference of from and to RGB values}

RGBDiff[0] := GetRValue (ColorToRGB (ToRGB)) — RGBFrom[0];

RGBDiff[1] := GetGValue (ColorToRGB (ToRGB)) — RGBFrom[1];

RGBDiff[2] := GetBValue (ColorToRGB (ToRGB)) — RGBFrom[2];

{ set pen sytle and mode}

Canvas.Pen.Style := psSolid;

Canvas.Pen.Mode := pmCopy;

{ set color band’s left and right coordinates}

ColorBand.Left := 0;

ColorBand.Right:= canvas.ClipRect.Right-Canvas.ClipRect.Left;

for I := 0 to $ff do

begin

{ calculate color band’s top and bottom coordinates}

ColorBand.Top := MulDiv (I , canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $100);

ColorBand.Bottom := MulDiv (I 1,canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $100);

{ calculate color band color}

R := RGBFrom[0] MulDiv (I, RGBDiff[0], $ff);

G := RGBFrom[1] MulDiv (I, RGBDiff[1], $ff);

B := RGBFrom[2] MulDiv (I, RGBDiff[2], $ff);

{ select brush and paint color band}

Canvas.Brush.Color := RGB (R, G, B);

Canvas.FillRect (ColorBand);

end;

end;

Эту процедуру объявляем в публичных объявлениях:

public

{ Public declarations }

procedure GradientRect(FromRGB, ToRGB: TColor; Canvas: TCanvas);

Для закраски формы в обработчик формы OnPaint нужно вставить:

GradientRect (clBlue, clBlack, Canvas);

По событию OnResize для формы напишем:

Paint;

{/codecitation}

Добавить комментарий