1 //1.单元内容 2 unit UnitAlienForm; 3 interface 4 uses 5 Windows, Forms, Classes, Graphics; 6 //从文件加载PNG 7 procedure AlienForm_PNGFromFile(AForm : TForm; AFileName : String); 8 //从资源加载PNG 9 procedure AlienForm_PNGFromResource(AForm : TForm; ResName : String; ResType : PWideChar; Instance : HINST = 0);10 //从图像对象加载11 procedure AlienForm_PNGFromGraphic(AForm : TForm; AGraphic : TGraphic);12 implementation13 procedure AlienForm_PNGFromFile(AForm : TForm; AFileName : String);14 var15 wic : TWICImage;16 begin17 wic := TWICImage.Create;18 wic.LoadFromFile(AFileName);19 AlienForm_PNGFromGraphic(AForm, wic);20 wic.Free;21 end;22 procedure AlienForm_PNGFromResource(AForm : TForm; ResName : String;ResType : PWideChar; Instance : HINST);23 var24 wic : TWICImage;25 r : TResourceStream;26 begin27 if Instance = 0 then28 Instance := HInstance;29 r := TResourceStream.Create(Instance, ResName, ResType);30 wic := TWICImage.Create;31 wic.LoadFromStream(r);32 AlienForm_PNGFromGraphic(AForm, wic);33 wic.Free;34 r.Free;35 end;36 procedure AlienForm_PNGFromGraphic(AForm : TForm; AGraphic : TGraphic);37 var38 ptDst, ptSrc: TPoint;39 Size: TSize;40 BlendFunction: TBlendFunction;41 bmp : TBitmap;42 begin43 bmp := TBitmap.Create;44 bmp.Assign(AGraphic);45 ptDst := Point(AForm.Left, AForm.Top);46 ptSrc := Point(0, 0);47 Size.cx := AGraphic.Width;48 Size.cy := AGraphic.Height;49 BlendFunction.BlendOp := AC_SRC_OVER;50 BlendFunction.BlendFlags := 0;51 BlendFunction.SourceConstantAlpha := $FF; // 透明度52 BlendFunction.AlphaFormat := AC_SRC_ALPHA;53 SetWindowLong(AForm.Handle, GWL_EXSTYLE, GetWindowLong(AForm.Handle,54 GWL_EXSTYLE) or WS_EX_LAYERED);55 UpdateLayeredWindow(AForm.Handle,56 AForm.Canvas.Handle,57 @ptDst,58 @Size,59 bmp.Canvas.Handle,60 @ptSrc,61 0,62 @BlendFunction,63 ULW_ALPHA);64 bmp.Free();65 end;66 end.67 68 //2.调用方法69 procedure TForm2.FormCreate(Sender: TObject);70 begin71 AlienForm_PNGFromFile(Form2, 'E:\未标题.png');72 end;