Изображение холста Delphi... нарисовать область (треугольник, прямоугольник, многоугольники)
У меня есть переменное количество точек на холсте.
Иногда его четыре раза три раза, или 6.
Есть функция, которая может рисовать область внутри?
Благодарим вас за помощь.
Ответы
Ответ 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;
Использование открытой конструкции массива и записи точки.