打印本文 打印本文 关闭窗口 关闭窗口
由shape控件得到Rgn(2000/11/21 三金 版权所有
作者:武汉SEO闵涛  文章来源:敏韬网  点击数747  更新时间:2009/4/23 18:39:28  文章录入:mintao  责任编辑:mintao

由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;
 

更好更多文章尽在三金主页-天铭心草堂
http://vip.6to23.com/tianmingxin

打印本文 打印本文 关闭窗口 关闭窗口