如何做出多邊體的Form?如圓形六邊形等!

解决方案 »

  1.   

    好象有个函数叫SetWindowLong是干这个的,有点记不住了,不好意思
      

  2.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      HR : HRGN;
    begin
      HR := CreateEllipticRgn(0,0,Form1.Width,Form1.Height);//圆形
      // 多边型用createpolygonrgn
      SetWindowRgn(Handle,HR,True);
      DeleteObject(HR);
    end;
      

  3.   

    var
     hr:THandle;
     small:integer;
    begin
     //圆的直径取窗体长和宽中短的一个
     if Width>=Height then small:=Height
     else small:=Width;
     hr:=CreateEllipticRgn(0,0,small,small);
     setWindowRgn(handle,hr,true);
    end;
      

  4.   

    var
      NewRgn:HRGN;
      Points:array[0..6] of tpoint;begin
      Points[0]:=point(0,0);
      Points[1]:=point(60,0);
      Points[2]:=point(90,30);
      Points[3]:=point(60,90);
      points[4]:=point(30,90);
      points[5]:=point(0,30);
     //大概计算一下六个点的坐标
     // NewRgn:=CreateEllipticRgn(0,0,50,50); // 画圆  NewRgn:=CreatePolygonRgn(Points, High(Points), ALTERNATE);
      SetWindowRgn(handle,NewRgn,true);
    end;
      

  5.   

    给你一个例子:
    四四方方的窗体也会变形,利用win32 API函数setwindowrgn就可以将窗口定义为任何形状,以下是将窗口定义为园角矩形的例子:procedure TPortForm.FormCreate(Sender: Tobject);var hr :thandle;beginhr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形(win API函数)setwindowrgn(handle,hr,true); //设置园角窗口end;为了使该窗口更好,应在onResize事件处理程序放相同的代码。/////////////////////////////////////用汉字做窗体形状procedure TForm1.FormCreate(Sender: TObject);varrgn:HRGN;beginBeginPath(Canvas.Handle);SetBkMode( Canvas.Handle, TRANSPARENT );Canvas.Font.Name:= '宋体';Canvas.Font.Size:=100;Canvas.TextOut( 20, 20, '漂亮吗?');//用"漂亮吗?"作为form的形状EndPath(Canvas.Handle);rgn:= PathToRegion(Canvas.Handle);SetWindowRgn( Handle, rgn, true );end;