to 不再:
呵呵,我想我没有误会你的意思,API里对RectInRegion的解释是:
The RectInRegion function determines whether any part of the specified rectangle is within the boundaries of a region.
~~~~~~~~
If any part of the specified rectangle lies within the boundaries of the region, the return value is nonzero.
~~~~~~~~~~~
“如果矩形区域有任何部分落在hrgn代表的区域内的话,该函数返回非零值”!
你想,“图形外框是否经过canvas上的某一矩形区域”是不是等同于“Canvas上的该矩形区域和图形区域是否相交”?
至于具体做法,如果你对这些API不熟悉的话,我给你个简单的例子,
比如在Image上画一个不规则五边形和一个圆,然后进行判断——
var
R, R2: TRect;
P: array[1..6] of TPoint;
H, H1, H2: HRGN;
begin
R := Rect(60, 80, 100, 120);//圆形的外框
H1 := CreateEllipticRgnIndirect(R);
P[1] := Point(0, 0);
P[2] := Point(20, 100);
P[3] := Point(120, 120);
P[4] := Point(20, 50);
P[5] := Point(70, 40);
P[6] := Point(0, 0);
H2 := CreatePolygonRgn(P, 6, WINDING);//五边形
R2 := Rect(115, 100, 125, 130);//测试删格
with Image1.Canvas do begin
Rectangle(R2);
Brush.Color := clBlue;
Polygon(P);
Brush.Color := clRed;
Ellipse(R.Left, R.Top, R.Right, R.Bottom);
end;
H := H1;//一定要先给H赋值!(参见API说明)
CombineRgn(H, H1, H2, RGN_OR);//合并,注意最后一个参数
if RectInRegion(H, R2) then ShowMessage('ok');//检验效果
end;