function GradientFill(DC: HDC; pVertex: Pointer; dwNumVertex: Cardinal; pMesh: Pointer; dwNumMesh, dwMode: Cardinal): Cardinal; stdcall external 'msimg32';
procedure TForm1.Button1Click(Sender: TObject);
const
Vertex: array [0..1] of packed record
X, Y: Cardinal;
Red, Green, Blue, Alpha: Word;
end = ((), (X: 200; Y: 200; Blue: $FFFF));
Rect: GRADIENT_RECT = (LowerRight: 1);
var Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
Bitmap.Width := Vertex[1].X - Vertex[0].X;
Bitmap.Height := Vertex[1].Y - Vertex[0].Y;
Bitmap.Canvas.Brush.Color := clBlack;
Bitmap.Canvas.FillRect(Classes.Rect(0, 0, Bitmap.Width, Bitmap.Height));
Bitmap.Canvas.Brush.Color := clWhite;
Bitmap.Canvas.Pen.Color := clWhite;
Bitmap.Canvas.Ellipse(0, 0, Bitmap.Width, Bitmap.Height);
GradientFill(Canvas.Handle, @Vertex, Length(Vertex), @Rect, 1, GRADIENT_FILL_RECT_H);
BitBlt(Canvas.Handle, Vertex[0].X, Vertex[0].Y, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCAND);
Bitmap.Destroy;
end;