Я создаю пользовательский элемент управления в 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;