Ein Farbdreieck kannst du mit GradientFill() realisieren, allerdings sind da nicht alle Farben vorhanden die es gibt, man kann ein Triangle festlegen und jeder Ecke eine Farbe zuweisen. Geht aber nur ab Win2000 und Win98.
Delphi-Quellcode:
function GradientFill(hdc: HDC; pVertex: PTriVertex; dwNumVertex: DWORD; pMesh: Pointer; dwNumMesh: DWORD; dwMode: DWORD): Boolean;
stdcall;
external '
gdi32.dll'
name '
GdiGradientFill';
type
PTRIVERTEX = ^TTRIVERTEX;
TTRIVERTEX =
packed record
x, y: Integer;
Red, Green, Blue, Alpha: Word;
end;
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
const
VertexCount = 3;
var
Vertex:
array[0..VertexCount - 1]
of TTriVertex;
Triangle: TGradientTriangle;
begin
// Punkt 1
Vertex[0].x := 10;
Vertex[0].y := 10;
Vertex[0].Red := $FF00;
// 255 shl 8, siehe beschreibung im PSDK
Vertex[0].Green := 0;
Vertex[0].Blue := 0;
Vertex[0].Alpha := 0;
// Punkt 2
Vertex[1].x := 200;
Vertex[1].y := 150;
Vertex[1].Red := 0;
Vertex[1].Green := $FF00;
// 255 shl 8, siehe beschreibung im PSDK
Vertex[1].Blue := 0;
Vertex[1].Alpha := 0;
// Punkt 3
Vertex[2].x := 50;
Vertex[2].y := 200;
Vertex[2].Red := 0;
Vertex[2].Green := 0;
Vertex[2].Blue := $FF00;
// 255 shl 8, siehe beschreibung im PSDK
Vertex[2].Alpha := 0;
// Ein Triangle aus den 3 punkten erstellen
Triangle.Vertex1 := 0;
Triangle.Vertex2 := 1;
Triangle.Vertex3 := 2;
// Zeichnen
GradientFill(Canvas.Handle, @Vertex[0], VertexCount, @Triangle, 1, GRADIENT_FILL_TRIANGLE);
end;