Please look at this sample gradient image I did with a Paint program:
It c
I like to use class helpers on TCanvas so I revised the code in the other answer.
type
TTriVertex = record
public
type
P = ^TTriVertex;
public
X, Y: DWORD;
Red, Green, Blue, Alpha: WORD;
constructor Create(APoint: TPoint; AColor: TColor; AAlpha: Word = 0);
end;
TTriVertexRect = record
public
TopLeft: TTriVertex;
LowerRight: TTriVertex;
constructor Create(ARect: TRect; Color1,Color2; AAlpha1: Word = 0; AAlpha2: Word = 0);
end;
{Enumerate the constants so they will show up on alt space in the IDE}
TGradientFillType = (
gftRectH = GRADIENT_FILL_RECT_H
,gftRectV = GRADIENT_FILL_RECT_V
,gftTriangle = GRADIENT_FILL_TRIANGLE);
TCavas_Helper = class helper for TCanvas
public
function GradientFill(const Vertexes: array of TTriVertexRect; FillType: TGradientFillType): Boolean; overload;
end;
{ TTriVertex }
constructor TTriVertex.Create(APoint: TPoint; AColor: TColor; AAlpha: Word = 0);
begin
X := APoint.X;
Y := APoint.Y;
Red := GetRValue(ColorToRGB(AColor)) SHL 8;
Green := GetGValue(ColorToRGB(AColor)) SHL 8;
Blue := GetBValue(ColorToRGB(AColor)) SHL 8;
Alpha := 0;
end;
{ TTriVertexRect }
constructor TTriVertexRect.Create(ARect: TRect; Color1, Color2: TColor; AAlpha1,
AAlpha2: Word);
begin
TopLeft.Create(ARect.TopLeft,Color1,AAlpha1);
LowerRight.Create(ARect.BottomRight,Color2,AAlpha2);
end;
{ TCavas_Helper }
function TCavas_Helper.GradientFill(const Vertexes: array of TTriVertexRect; FillType: TGradientFillType): Boolean;
var
GRect: array of TGradientRect;
Index: Integer;
begin
SetLength(GRect,Length(Vertexes));
for Index := 0 to Length(GRect) do begin
GRect[Index].UpperLeft := Index*2;
GRect[Index].LowerRight := Index*2 + 1;
end;
Result := WIndows.GradientFill(Handle,@Vertexes[0],Length(Vertexes)*2,@GRect[0],Length(GRect),Ord(FillType))
end;
So the actual call looks like this
procedure TForm56.FormPaint(Sender: TObject);
begin
Canvas.GradientFill([
TTriVertexRect.Create(Rect(0,0,ClientWidth,ClientHeight DIV 2),clWhite,$00056AFF)
,TTriVertexRect.Create(Rect(0,ClientHeight DIV 2,ClientWidth,ClientHeight),$00056AFF,clWhite)
],gftRectV);
end;
Sample: