日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GDI+用PNG图片做半透明异型窗口

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GDI+用PNG图片做半透明异型窗口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • {*******************************************************}
  • {???????????????????????????????????????????????????????}
  • {???????GDI+用PNG圖片做半透明異型窗口???????????????????}
  • {???????????????????????????????????????????????????????}
  • {???????版權所有?(C)?2008?QQ:3150379????????????????????}
  • {???????????????????????????????????????????????????????}
  • {*******************************************************}
  • unit?Unit1;
  • interface
  • uses
  • ??Windows,?Messages,?SysUtils,?Variants,?Classes,?Graphics,?Controls,?Forms,
  • ??Dialogs,
  • ??GDIPAPI,?GDIPOBJ,?Menus,?StdCtrls;
  • type
  • ??TForm1?=?class(TForm)
  • ????PopupMenu1:?TPopupMenu;
  • ????mniClose:?TMenuItem;
  • ????mniChangeSkin:?TMenuItem;
  • ????About1:?TMenuItem;
  • ????Stayontop1:?TMenuItem;
  • ????procedure?FormCreate(Sender:?TObject);
  • ????procedure?FormMouseDown(Sender:?TObject;?Button:?TMouseButton;
  • ??????Shift:?TShiftState;?X,?Y:?Integer);
  • ????procedure?About1Click(Sender:?TObject);
  • ????procedure?Stayontop1Click(Sender:?TObject);
  • ????procedure?mniChangeSkinClick(Sender:?TObject);
  • ????procedure?mniCloseClick(Sender:?TObject);
  • ??private
  • ????m_Blend:?BLENDFUNCTION;
  • ????procedure?SetTransparent(lpSkinFile:?WideString;?nTran:?integer);
  • ??????????{???Private???declarations???}
  • ??public
  • ??????????{???Public???declarations???}
  • ??end;
  • var
  • ??Form1:?TForm1;
  • implementation
  • {$R???*.dfm}
  • procedure?TForm1.FormCreate(Sender:?TObject);
  • begin
  • ??BorderStyle?:=?bsNone;
  • ??m_Blend.BlendOp?:=?AC_SRC_OVER;?//???the???only???BlendOp???defined???in???Windows???2000
  • ??m_Blend.BlendFlags?:=?0;?//???Must???be???zero
  • ??m_Blend.AlphaFormat?:=?AC_SRC_ALPHA;?//This???flag???is???set???when???the???bitmap???has???an???Alpha???channel
  • ??m_Blend.SourceConstantAlpha?:=?255;
  • ??if?(FileExists(ExtractFilePath(ParamStr(0))?+?'Security?-?Alert.png'))?then
  • ????SetTransparent(WideString(ExtractFilePath(ParamStr(0))?+?'Security?-?Alert.png'),?100);
  • ??//???Stay???on???top
  • ??SetWindowPos(Handle,?HWND_TOPMOST,?0,?0,?0,?0,?SWP_NOMOVE?or?SWP_NOSIZE);
  • end;
  • procedure?TForm1.SetTransparent(lpSkinFile:?WideString;?nTran:?integer);
  • var
  • ??GPImage:?TGPImage;
  • ??GPGraph:?TGPGraphics;
  • ??m_Image:?TGPImage;
  • ??m_hdcMemory:?HDC;
  • ??hdcScreen:?HDC;
  • ??hBMP:?HBITMAP;
  • ??sizeWindow:?SIZE;
  • ??rct:?TRECT;
  • ??ptSrc:?TPOINT;
  • begin
  • ??//???Use???GDI+???load???image
  • ??GPImage?:=?TGPImage.Create();
  • ??m_Image?:=?GPImage.FromFile(lpSkinFile);
  • ??//???Create???Compatible???Bitmap
  • ??hdcScreen?:=?GetDC(0);
  • ??m_hdcMemory?:=?CreateCompatibleDC(hdcScreen);
  • ??hBMP?:=?CreateCompatibleBitmap(hdcScreen,?m_Image.GetWidth(),?m_Image.GetHeight());
  • ??SelectObject(m_hdcMemory,?hBMP);
  • ??//???Alpha???Value
  • ??if?(nTran?<?0)?or?(nTran?>?100)?then
  • ????nTran?:=?100;
  • ??m_Blend.SourceConstantAlpha?:=?round(nTran?*?2.55);?//???1~255
  • ??GetWindowRect(Handle,?rct);
  • ??GPGraph?:=?TGPGraphics.Create(m_hdcMemory);
  • ??GPGraph.DrawImage(m_Image,?0,?0,?m_Image.GetWidth(),?m_Image.GetHeight());
  • ??sizeWindow.cx?:=?m_Image.GetWidth();
  • ??sizeWindow.cy?:=?m_Image.GetHeight();
  • ??ptSrc.x?:=?0;
  • ??ptSrc.y?:=?0;
  • ??//???Set???Window???style
  • ??SetWindowLong(Handle,?GWL_EXSTYLE,?GetWindowLong(Handle,?GWL_EXSTYLE)?or?WS_EX_LAYERED);
  • ??//???perform???the???alpha???blend
  • ??UpdateLayeredWindow(Handle,?hdcScreen,?nil,@sizeWindow,?m_hdcMemory,?@ptSrc,?0,?@m_Blend,?ULW_ALPHA);
  • ??//Release???resources
  • ??GPGraph.ReleaseHDC(m_hdcMemory);
  • ??ReleaseDC(0,?hdcScreen);
  • ??hdcScreen?:=?0;
  • ??DeleteObject(hBMP);
  • ??DeleteDC(m_hdcMemory);
  • ??m_hdcMemory?:=?0;
  • ??m_Image.Free;
  • ??GPGraph.Free;
  • end;
  • procedure?TForm1.FormMouseDown(Sender:?TObject;?Button:?TMouseButton;
  • ??Shift:?TShiftState;?X,?Y:?Integer);
  • begin
  • ??if?(Button?=?mbLeft)?then
  • ??begin
  • ????ReleaseCapture();
  • ????Perform(WM_SYSCOMMAND,?SC_MOVE?or?HTCAPTION,?0);
  • ??end;
  • end;
  • procedure?TForm1.About1Click(Sender:?TObject);
  • begin
  • ??MessageDlg('效果還不行吧!'#13+'QQ:3150379',?mtInformation,?[mbOK],?0);
  • end;
  • procedure?TForm1.Stayontop1Click(Sender:?TObject);
  • var
  • ??mi:?TMenuItem;
  • ??WindowPos:?HWND;
  • begin
  • ??mi?:=?Sender?as?TMenuItem;
  • ??mi.Checked?:=?not?mi.Checked;
  • ??if?mi.Checked?then
  • ????WindowPos?:=?HWND_TOPMOST
  • ??else
  • ????WindowPos?:=?HWND_NOTOPMOST;
  • ??SetWindowPos(Handle,?WindowPos,0,?0,?0,?0,?SWP_NOMOVE?or?SWP_NOSIZE);
  • end;
  • procedure?TForm1.mniChangeSkinClick(Sender:?TObject);
  • var
  • ??dlgOpen:?TOpenDialog;
  • begin
  • ??dlgOpen?:=?TOpenDialog.Create(Self);
  • ??dlgOpen.Filter?:=?'PNG???file(*.png)|*.png';
  • ??if?(dlgOpen.Execute())?then
  • ??begin
  • ????SetTransparent(WideString(dlgOpen.FileName),?100);
  • ????Invalidate();
  • ??end;
  • ??dlgOpen.Free;
  • end;
  • procedure?TForm1.mniCloseClick(Sender:?TObject);
  • begin
  • ??Close;
  • end;
  • end.
  • 總結

    以上是生活随笔為你收集整理的GDI+用PNG图片做半透明异型窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。