由shape控件得到Rgn(2000/11/21 三金 版权所有
如有问题,请参考VCL库shape组件源代码
function GetShapeRgn(shape:TShape):HRgn;
var
X, Y, W, H, S: Integer;
ret:HRgn;
begin
result:=0;
X :=shape.left+shape.Pen.Width div 2;
Y :=shape.top+shape.Pen.Width div 2 ;
W :=shape.Width- shape.Pen.Width + 1;
H :=shape.Height-shape.Pen.Width + 1;
if shape.Pen.Width = 0 then
begin
Dec(W);
Dec(H);
end;
if W < H then S := W else S := H;
if shape.Shape in [stSquare, stRoundSquare, stCircle] then
begin
Inc(X, (W - S) div 2); //得到新的X值
Inc(Y, (H - S) div 2); //得到新的Y值
W := S;
H := S;
end;
case shape.Shape of
stRectangle, stSquare:
begin
ret:=CreateRectRgn(X, Y, X + W, Y + H);
if ret=null then
result:=0
else
result:=ret;
end;
stRoundRect, stRoundSquare:
begin
ret:=CreateRoundRectRgn(X, Y, X + W, Y + H, S div 4, S div 4);
if ret=null then
result:=0
else
result:=ret;
end;
stCircle, stEllipse:
begin
ret:=CreateEllipticRgn(X, Y, X + W, Y + H);
if ret=null then
result:=0
else
result:=ret;
end;
end;
end;
更好更多文章尽在三金主页-天铭心草堂