Delphi图像画布...绘制一个区域(三角形,矩形,多边形)

Pan*_*al. 11 delphi

我在画布上有不同数量的点.有时它的其他四个时间点为3点,或者6.是否有可以在内部绘制区域的功能?

谢谢您的帮助.

TLa*_*ama 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;
Run Code Online (Sandbox Code Playgroud)

这是它的样子:

在此输入图像描述


And*_*and 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;
Run Code Online (Sandbox Code Playgroud)

一劳永逸地定义和实施.现在你可以做到

Canvas.Pen.Width := 2;
Canvas.Pen.Color := clRed;
Canvas.Brush.Color := clYellow;
DrawPolygon(Canvas, [5, 5, 55, 5, 30, 30]);
Run Code Online (Sandbox Code Playgroud)

绘制与TLama示例中相同的数字.

  • 我希望我能接受所有3.你们都帮助了.谢谢. (4认同)

LU *_* RD 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;
Run Code Online (Sandbox Code Playgroud)

利用开放数组构造和Point记录.