Mega Code Archive

 
Categories / Delphi / Graphic
 

How to shape a form to a bitmap

Title: How to shape a form to a bitmap unit Unit1; interface uses Windows,Classes,SysUtils,Graphics,Forms; type TRGBArray=array[0..32767]ofTRGBTriple; PRGBArray=^TRGBArray; type TForm1=class(TForm) procedure FormCreate(Sender:TObject); procedure FormDestroy(Sender:TObject); private {Private declarations} FRegion:THandle; function CreateRegion(Bmp:TBitmap):THandle; end; var Form1:TForm1; implementation {$R*.dfm} functionTForm1.CreateRegion(Bmp:TBitmap):THandle; var X,Y,StartX:Integer; Excl:THandle; Row:PRGBArray; TransparentColor:TRGBTriple; begin Bmp.PixelFormat:=pf24Bit; Result:=CreateRectRGN(0,0,Bmp.Width,Bmp.Height); for Y:=0 to Bmp.Height -1 do begin Row:=Bmp.Scanline[Y]; StartX:=-1; if Y=0 then TransparentColor:=Row[0]; forX:=0 to Bmp.Width-1 do begin if (Row[X].rgbtRed =TransparentColor.rgbtRed)and (Row[X].rgbtGreen=TransparentColor.rgbtGreen)and (Row[X].rgbtBlue=TransparentColor.rgbtBlue)then begin if StartX=-1theStartX:=X; end else begin if StartX-1 then begin Excl:=CreateRectRGN(StartX,Y,X+1,Y+1); try CombineRGN(Result,Result,Excl,RGN_DIFF); StartX:=-1; finally DeleteObject(Excl); end; end; end; end; ifStartX-1then begin Excl:=CreateRectRGN(StartX,Y,Bmp.Width,Y+1); try CombineRGN(Result,Result,Excl,RGN_DIFF); finally DeleteObject(Excl); end; end; end; end; procedureTForm1.FormCreate(Sender:TObject); var Bmp:TBitmap; begin Bmp:=TBitmap.Create; try Bmp.LoadFromFile('C:\YourBitmap.bmp'); FRegion:=CreateRegion(Bmp); SetWindowRGN(Handle,FRegion,True); finally Bmp.Free; end; end; procedure TForm1.FormDestroy(Sender:TObject); begin DeleteObject(FRegion); end; end.