Как создать пятиугольную форму на Delphi? - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь создать форму пятиугольной формы в Delphi, но я не могу нарисовать точки в правильном порядке, поэтому форма продолжает иметь неправильную форму.

procedure TfrmPoligono.FormCreate(Sender: TObject);
var
  _Region: hRgn;

  _Tip,
  _MostLeft,
  _MostRight,
  _BottomLeft,
  _BottomRight: TPoint;
begin
  // fRegionPoints: array[0..4] of TPoint declared on the private section

  _Tip.X := 600;
  _Tip.Y := 0;

  _MostLeft.X := 100;
  _MostLeft.Y := 0;

  _MostRight.X := 1100;
  _MostRight.Y := 300;

  _BottomLeft.X := 200;
  _BottomLeft.Y := 700;

  _BottomRight.X := 1000;
  _BottomRight.Y := 700;

  fRegionPoints[0] := _Tip;
  fRegionPoints[1] := _MostLeft;
  fRegionPoints[2] := _MostRight;
  fRegionPoints[3] := _BottomLeft;
  fRegionPoints[4] := _BottomRight;

  _Region := CreatePolygonRgn(fRegionPoints[0], Length(fRegionPoints), ALTERNATE);

  SetWindowRgn(Handle, _Region, True);
end;

Когда вы видите, я добавил TPoints в логическом порядке, который должен быть сверху вниз, слева направо. Но я попробовал другие конфигурации без успеха.

Что я делаю не так?

1 Ответ

5 голосов
/ 05 марта 2020

Когда вы задаете многоугольную форму на компьютере, вы указываете вершины в том же порядке, в котором вы рисуете многоугольник на бумаге карандашом: по часовой стрелке или против часовой стрелки. В вашем случае, выбирая ориентацию против часовой стрелки,

fRegionPoints[0] := _Tip;
fRegionPoints[1] := _MostLeft;
fRegionPoints[2] := _BottomLeft;
fRegionPoints[3] := _BottomRight;
fRegionPoints[4] := _MostRight;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...