gpt4 book ai didi

delphi - 判断一个点是否在多边形内?

转载 作者:行者123 更新时间:2023-12-03 14:49:41 31 4
gpt4 key购买 nike

我正在Delphi中制作一个自定义控件(继承自TCustomControl),它由许多多边形列表项(不规则形状)组成。我需要为每个项目实现鼠标事件,但首先我需要能够检测鼠标位置是否在给定的多边形(TPoint 数组)内。我正在捕获 HitTest 消息 (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;

最佳答案

您可以使用PtInRegion :

function PointInPolygon(Point: TPoint; const Polygon: array of TPoint): Boolean;
var
rgn: HRGN;
begin
rgn := CreatePolygonRgn(Polygon[0], Length(Polygon), WINDING);
Result := PtInRegion(rgn, Point.X, Point.Y);
DeleteObject(rgn);
end;

关于delphi - 判断一个点是否在多边形内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540796/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com