Определить, находится ли точка внутри многоугольника?

Я создаю пользовательский элемент управления в Delphi (унаследованный от TCustomControl), который состоит из нескольких элементов списка полигонов (нерегулярных формы). Мне нужно реализовать события мыши для каждого элемента, но сначала мне нужно определить, находится ли позиция мыши в заданном полигоне ( массив TPoint). Я перехватываю сообщение Hit Test ( WM_NCHITTEST), и именно здесь мне нужно будет выполнить эту проверку. У меня есть несколько полигонов, я прохожу по каждому элементу полигона и выполняю эту проверку, чтобы увидеть, находится ли позиция мыши по осям X/Y внутри этого полигона.

procedure TMyControl.WMNCHitTest(var Message: TWMNCHitTest);
var
  P: TPoint; //X/Y of Mouse
  Poly: TPoints; //array of TPoint
  X: Integer; //iterator
  I: TMyListItem; //my custom list item
begin
  P.X:= Message.XPos;
  P.Y:= Message.YPos;
  for X := 0 to Items.Count - 1 do begin
    I:= Items[X]; //acquire my custom list item by index
    Poly:= I.Points; //acquire polygon points

    //Check if Point (P) is within Polygon (Poly)...?

  end;
end;
7
задан Jerry Dodge 10 May 2012 в 19:21
поделиться