procedure Spirale(Cnv: TCanvas; x, y: Integer; Abstand, Windungen, Dicke: Byte;
Farbe: TColor; Uhrzeigersinn: Boolean);
var z, i, j, a, b: Integer;
begin
Cnv.pen.color := Farbe;
Cnv.pen.width := Dicke;
for z := 0 to pred(Windungen) do begin
i := succ(z) * Abstand;
j := trunc((z + 0.5) * Abstand);
if Uhrzeigersinn then begin
a := x + i;
b := x - i;
end else begin
a := x - i;
b := x + i;
end;
Cnv.Arc(x - Abstand * z, y - j, x + i, y + j, a, y, b, y);
Cnv.Arc(x - i, y - i, x + i, y + i, b, y, a, y);
end;
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
Spirale(Canvas, 300, 200, 9, 7, 1, clred, true);
end;