我在画布上有不同数量的点。 有时它的四个其他时间3点,或6。 是否有可以在内部绘制区域的功能?
感谢您的帮助。
答案 0 :(得分:15)
使用TCanvas.Polygon
功能。声明一个TPoint
数组,将其长度设置为您的点数,指定每个点的坐标(可选择修改画布笔和/或画笔)并将此数组传递给TCanvas.Polygon
函数。就像在这个无聊的例子中一样:
procedure TForm1.Button1Click(Sender: TObject);
var
Points: array of TPoint;
begin
SetLength(Points, 3);
Points[0] := Point(5, 5);
Points[1] := Point(55, 5);
Points[2] := Point(30, 30);
Canvas.Pen.Width := 2;
Canvas.Pen.Color := clRed;
Canvas.Brush.Color := clYellow;
Canvas.Polygon(Points);
end;
以下是它的样子:
答案 1 :(得分:11)
作为TLama优秀答案的补充,在这种情况下,您可以使用开放数组构造获得非常方便的语法。考虑辅助函数
procedure DrawPolygon(Canvas: TCanvas; const Points: array of integer);
var
arr: array of TPoint;
i: Integer;
begin
SetLength(arr, Length(Points) div 2);
for i := 0 to High(arr) do
arr[i] := Point(Points[2*i], Points[2*i+1]);
Canvas.Polygon(arr);
end;
一劳永逸地定义和实施。现在你可以做到
Canvas.Pen.Width := 2;
Canvas.Pen.Color := clRed;
Canvas.Brush.Color := clYellow;
DrawPolygon(Canvas, [5, 5, 55, 5, 30, 30]);
绘制与TLama示例中相同的数字。
答案 2 :(得分:10)
作为TLama和Andreas答案的补充,这是另一种选择:
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Pen.Color := clRed;
Canvas.Brush.Color := clYellow;
Self.Canvas.Polygon( [Point(5,5), Point(55,5), Point(30,30)]);
end;
利用开放数组构造和点记录。