Delphi 德尔福图像画布。。。绘制区域(三角形、矩形、多边形)

Delphi 德尔福图像画布。。。绘制区域(三角形、矩形、多边形),delphi,Delphi,我在画布上有数量可变的点。 有时是4倍,有时是3分,有时是6分。 是否有一个功能可以绘制内部区域 谢谢你的帮助 使用该函数。声明的数组,将其长度设置为点的计数,指定每个点的坐标(可以选择修改画布笔和/或画笔),并将此数组传递给函数。就像这个无聊的例子: procedure TForm1.Button1Click(Sender: TObject); var Points: array of TPoint; begin SetLength(Points, 3); Points[0] :=

我在画布上有数量可变的点。 有时是4倍,有时是3分,有时是6分。 是否有一个功能可以绘制内部区域

谢谢你的帮助

使用该函数。声明的数组,将其长度设置为点的计数,指定每个点的坐标(可以选择修改画布笔和/或画笔),并将此数组传递给函数。就像这个无聊的例子:

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;
下面是它的样子:


作为对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示例中相同的图。

作为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;

利用开放数组构造和点记录。

我很高兴这个答案是公认的答案。第一并不是最重要的。做最好的是!