var
Form1: TForm1;
//圆角矩形
procedure DrawRndRectRegion(hWnd: HWND; Rect: TRect);
//椭圆1
procedure DrawEllipticRegion(hWnd: HWND; Rect: TRect); overload;
//椭圆2
procedure DrawEllipticRegion(hWnd: HWND); overload;
//多边形
procedure DrawPolygonRegion(hWnd: HWND; Rect: TRect; NumPoints: Integer; IsStar: Boolean);
//汉字
procedure SetRgn_Chs(hWnd: HWND; ACanvas : TCanvas; AChs: string);
implementation
{$R *.dfm}
//圆角矩形
procedure DrawRndRectRegion(hWnd: HWND; Rect: TRect);
var
rgn : HRGN;
begin
rgn := CreateRoundRectRgn(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom, 30, 30);
SetWindowRgn(hWnd, rgn, True);
end;
//椭圆1
procedure DrawEllipticRegion(hWnd: HWND; Rect: TRect); overload;
var
rgn : HRGN;
begin
rgn := CreateEllipticRgn(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
SetWindowRgn(hWnd, rgn, True);
end;
//椭圆2
procedure DrawEllipticRegion(hWnd: HWND); overload;
var
rgn : HRGN;
myBrush, myDC : Longint ;
begin
myBrush := CreateSolidBrush(clRed );
myDC := GetDC(hWnd);
BeginPath (myDC) ;
SelectObject(myDC, mybrush);
Ellipse(myDC, 100, 100, 510, 360);
DeleteObject(mybrush);
EndPath (myDC);
rgn := PathToRegion(mydc);
SetWindowRgn(hWnd, rgn, True);
end;
//多边形
procedure DrawPolygonRegion(hWnd: HWND; Rect: TRect; NumPoints: Integer; IsStar: Boolean);
const
RadConvert = PI/180;
Degrees = 360;
MaxLines = 100;
var
rgn : HRGN;
x, y, xCenter, yCenter, radius, pts, I : Integer;
angle, rotation: Extended;
arPts : Array[0..MaxLines] of TPoint;
begin
xCenter := (Rect.Right - Rect.Left) div 2;
yCenter := (Rect.Bottom - Rect.Top) div 2;
if IsStar then begin
rotation := Degrees/(2*NumPoints);
pts := 2 * NumPoints;
end else begin
rotation := Degrees/NumPoints; //得到每个顶点的度数
pts := NumPoints ;
end;
radius := yCenter;
for I := 0 to pts - 1 do begin
if IsStar then
if (I mod 2) = 0 then
radius := Round(radius/2)
else
radius := yCenter;
angle := ((I * rotation) + 90) * RadConvert;
x := xCenter + Round(cos(angle) * radius);
y := yCenter - Round(sin(angle) * radius);
arPts[I].X := x;
arPts[I].Y := y;
end;
rgn := CreatePolygonRgn(arPts, pts, WINDING);
SetWindowRgn(hWnd, rgn, True);
end;
//汉字
procedure SetRgn_Chs(hWnd: HWND; ACanvas : TCanvas; AChs: string);
var
rgn : HRGN;
begin
BeginPath(ACanvas.Handle);
SetBkMode( ACanvas.Handle, TRANSPARENT );
ACanvas.Font.Name := '宋体';
ACanvas.Font.Size := 60;
ACanvas.TextOut( 0, 10, AChs);
EndPath(ACanvas.Handle);
rgn := PathToRegion(ACanvas.Handle);
SetWindowRgn(hWnd, rgn, True );
end;