Подтвердить что ты не робот

Изображение холста Delphi... нарисовать область (треугольник, прямоугольник, многоугольники)

У меня есть переменное количество точек на холсте. Иногда его четыре раза три раза, или 6. Есть функция, которая может рисовать область внутри?

Благодарим вас за помощь.

4b9b3361

Ответ 1

Используйте функцию 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;

Вот как это выглядит:

enter image description here

Ответ 2

В дополнение к превосходному ответу 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.

Ответ 3

В качестве дополнения как к ответам 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;

Использование открытой конструкции массива и записи точки.