计算象素点的宽度
function GetScreenPointHorzWidth: Double;
var
DC: HDC;
begin
DC := GetDC(0);
Result := GetDeviceCaps(DC, HORZSIZE) / GetDeviceCaps(DC, HORZRES);
ReleaseDC(DC, 0);
end;
计算象素点的宽度
function GetScreenPointVertHeight: Double;
var
DC: HDC;
begin
DC := GetDC(0);
Result := GetDeviceCaps(DC, VERTSIZE) / GetDeviceCaps(DC, VERTRES);
ReleaseDC(DC, 0);
end;
一般情况下两者相等。
你的不规则图形的边界点你应该知道吧。这样的话,你可以创建一个RGN
比如你得到边界点的Point数组为BorderPointDynArray(类型为array of TPoint)
这样你就可以创建区域了
procedure CreateRGN(BorderPointDynArray: array of TPoint): HRGN;
begin
Result := CreatePolygonRgn(BorderPointDynArray[0],
Length(BorderPointDynArray), WINDING);
end;
区域创建好了,再用这个函数判断点是否在区域内。
比如此点为 APoint,计算到的区域为 ARGN
Result := PtInRegion(ARGN, APoint.x, APoint.y)
就可判断此点是否在区域内。