procedure TForm1.FormCreate(Sender: TObject); var R: HRgn; P: array [0..360] of TPoint; x,y,radius,c1,c2,theta:integer; begin radius:=200; c1:=300; // center x c2:=300; // center y for theta:=0 to 360 do begin x:=c1+round(radius * cos(theta)); y:=c2+round(radius * sin(theta)); p[theta]:=point(x,y); end; // R := CreatePolygonRgn (P , 360 , ALTERNATE); R := CreatePolygonRgn (P , 360 , WINDING); SetWindowRgn(Form1.Handle, R , TRUE); end; Yes you have to use the CreatePolygonRgn and SetWindowRgn. In this example I create a round form, you would have to watch you coordinates to ensure you have the title bar still visible at the top so you can move your form, either that or you would have to implement the functionality yourself. Create whatever shape you want using an array of TPoint and CreatePolygonRgn