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

В дополнение к превосходному ответу 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;
Использование открытой конструкции массива и записи точки.