百度空间 | 百度首页 
 
查看文章
 
delphi 特殊窗体
2009-10-27 09:02

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;


类别:delphi园地 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu