呵呵,是你的用法错了,下面是创建三角行的代码:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
const
  MyRgn: array[1..8] of integer = (2,135,
    115,22,228,135,2,135); //区域坐标var
  HR: HRGN;{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
  HR := CreatePolygonRgn(MyRgn,4,ALTERNATE); //创建一个区域
  SetWindowRgn(Form1.Handle,HR,False); // 设置窗口区域
  UpdateWindow(Form1.Handle); //更新窗口
end;end.

解决方案 »

  1.   

    下面是用你的方法的代码:(也是三角形?),呵呵~~
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TPtArray =array[0..6] of TPoint;
      PPtArray =^TPtArray;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationvar
      R :HRGN;
      P :PPtArray;{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      GetMem(P,7*sizeof(TPoint));
      P^[0].X:=0;
      P^[0].Y:=10;
      P^[1].X:=29;
      P^[1].Y:=P^[1].Y;
      P^[2].X:=29;
      P^[2].Y:=0;
      P^[3].X:=325;
      P^[3].Y:=0;
      P^[4].X:=325;
      P^[4].Y:=240;
      P^[5].X:=29;
      P^[5].Y:=240;
      P^[6].X:=29;
      P^[6].Y:=15;
      R :=CreatePolygonRgn(P,7,ALTERNATE);
      SetWindowRgn(Handle,R,false);   //这里用false
      FreeMem(P,7*sizeof(TPoint));
      UpdateWindow(Form1.Handle); //要更新窗口end;end.
    主要是UpdateWindow函数的使用和SetWindowRgn时的false(true时无法显示),多交流,呵呵~~  (给分~~)
      

  2.   

    不好意思,第2种方法错了(同时开了2个Delphi,运行错了一个),你的方法我再试试,但第一种肯定行!
      

  3.   

    试不出来,你要急用的话,就用
    const
      MyRgn: array[1..8] of integer = (2,135,
        115,22,228,135,2,135); //区域坐标

      HR := CreatePolygonRgn(MyRgn,4,ALTERNATE); //创建一个区域
      SetWindowRgn(Form1.Handle,HR,False); // 设置窗口区域
      UpdateWindow(Form1.Handle); //更新窗口
    方法吧,其中的MyRgn数组是两位一个坐标点的,对于n边形,有n+1个坐标点,并要保证个个点的组合图形是封闭的。
      

  4.   

    type
      TPtArray =array[0..6] of TPoint;
      PPtArray =^TPtArray;
    var
      R :HRGN;
      P :PPtArray;
    begin
      GetMem(P,7*sizeof(TPoint));
      P^[0].X:=0;
      P^[0].Y:=10;
      P^[1].X:=29;
      P^[1].Y:=P^[1].Y;////<<<<<<<<<<<<<<这一行错了
      P^[2].X:=29;
      P^[2].Y:=0;
      P^[3].X:=325;
      P^[3].Y:=0;
      P^[4].X:=325;
      P^[4].Y:=240;
      P^[5].X:=29;
      P^[5].Y:=240;
      P^[6].X:=29;
      P^[6].Y:=15;
      R :=CreatePolygonRgn(P,7,ALTERNATE);////返回值为0
      SetWindowRgn(Handle,R,True);
      FreeMem(P,7*sizeof(TPoint));
    end;