delphi 异形窗体可半透明
来源:互联网 发布:世界简史 知乎 编辑:程序博客网 时间:2024/05/22 13:59
unit xDrawForm;interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Menus, Graphics,GDIPOBJ,GDIPAPI,GDIPUTIL;type TwwGDIImage = class public n_Pos_X : Integer; n_Pos_Y : Integer; n_Width : Integer; n_Height : Integer; GPImageNormal : TGPImage; procedure CreateImageNormal(wsFileName: WideString;nPosX,nPosY,nW,nH:Integer); end; TwwGDIButton = class(TwwGDIImage) public GPImageHot : TGPImage; GPImageDown : TGPImage; end; TwwCanvas = class(TObject) private m_hdcMemory: HDC; hdcScreen: HDC; hBMP: HBITMAP; m_Blend: BLENDFUNCTION; // 事件 FGPGraph: TGPGraphics; FOnDrawImage: TNotifyEvent; procedure BeginDraw(); // 绘图前置工作 procedure EndDraw(Handle:THandle); // 绘图收尾工作 public sizeWindow: SIZE; ptSrc: TPOINT; n_Handle : THandle; procedure RePaint(h:THandle); procedure InitCanvas(nx,ny:Integer); procedure wwDrawImage(wwGDIImage :TwwGDIImage); property GPGraph: TGPGraphics read FGPGraph write FGPGraph; property OnDrawImage: TNotifyEvent read FOnDrawImage write FOnDrawImage; end;implementation{ TwwCanvas }procedure TwwCanvas.BeginDraw;begin // 获取桌面屏幕设备 hdcScreen := GetDC(0); // 创建一个与指定设备兼容的内存设备上下文环境(DC) m_hdcMemory := CreateCompatibleDC(hdcScreen); // 创建与指定的设备环境相关的设备兼容的位图 hBMP := CreateCompatibleBitmap(hdcScreen, sizeWindow.cx, sizeWindow.cy ); // 选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象 SelectObject(m_hdcMemory, hBMP); // 创建画布 GPGraph := TGPGraphics.Create(m_hdcMemory);end;procedure TwwCanvas.wwDrawImage(wwGDIImage: TwwGDIImage);begin GPGraph.DrawImage( wwGDIImage.GPImageNormal, wwGDIImage.n_Pos_X, wwGDIImage.n_Pos_Y, wwGDIImage.n_Width, wwGDIImage.n_Height)end;procedure TwwCanvas.EndDraw(Handle:THandle);begin // 设置窗体风格 SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); // 执行透明混合 UpdateLayeredWindow(Handle, hdcScreen, nil,@sizeWindow, m_hdcMemory, @ptSrc, 0, @m_Blend, ULW_ALPHA); // 设置窗体位置 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); // 各种释放就对了.. 不然画起来会糊 GPGraph.ReleaseHDC(m_hdcMemory); ReleaseDC(0, hdcScreen); hdcScreen := 0; DeleteObject(hBMP); DeleteDC(m_hdcMemory); m_hdcMemory := 0; GPGraph.Free;end;procedure TwwCanvas.RePaint(h:THandle);begin if Assigned(FOnDrawImage) then begin BeginDraw(); FOnDrawImage(Self); EndDraw(h); end;end;procedure TwwCanvas.InitCanvas(nx, ny: Integer);begin 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; sizeWindow.cx := nx; sizeWindow.cy := ny; ptSrc := Point(0,0);end;{ TwwGDIImage }procedure TwwGDIImage.CreateImageNormal(wsFileName: WideString;nPosX,nPosY,nW,nH:Integer);begin Self.GPImageNormal := TGPImage.Create(wsFileName); Self.n_Pos_X := nPosX; Self.n_Pos_Y := nPosY; Self.n_Width := nW; Self.n_Height:= nH;end;end.unit uMainForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, GDIPOBJ,GDIPAPI,GDIPUTIL;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public procedure DrawImage(Sender: TObject); { Public declarations } end;var Form1: TForm1;implementationuses xDrawForm;var wwCanvas : TwwCanvas = nil; img_BackGround: TwwGDIImage= nil; // 背景图// img_ProgressBar1: TwwGDIImage= nil; // 上滚动条// img_ProgressBar2: TwwGDIImage= nil; // 下滚动条// img_Lighting: TwwGDIImage= nil; // 闪光点{$R *.dfm}procedure TForm1.DrawImage(Sender: TObject);begin TwwCanvas(Sender).wwDrawImage(img_BackGround);end;procedure TForm1.FormCreate(Sender: TObject);begin DoubleBuffered := True; BorderStyle := bsNone; wwCanvas := TwwCanvas.Create(); wwCanvas.InitCanvas(872,690); wwCanvas.OnDrawImage := Self.DrawImage; img_BackGround := TwwGDIImage.Create(); img_BackGround.CreateImageNormal('BackGround.png',0,0,872,690);end;procedure TForm1.FormShow(Sender: TObject);begin wwCanvas.RePaint(Self.Handle);end;end.
0 0
- delphi 异形窗体可半透明
- vc实现异形半透明窗体
- delphi 实现可移动异形窗体(附项目文件)
- delphi 创建半透明的异形窗口
- delphi 半透明窗体类
- 使用duilib开发半透明异形窗体程序(补充)
- DIY Delphi 半透明窗体 (1)
- DIY Delphi 半透明窗体(2)
- delphi XE制作异形窗体和窗体透明度
- 异形窗体
- 使用duilib开发半透明异形窗体程序(附源码和demo)
- 异形窗体的实现
- 异形窗体控件
- 异形窗体的实现
- jdk7透明异形窗体
- 创建异形窗体
- C#实现异形窗体
- VC异形窗体
- NYOJ 1087 摆方格
- tomcat开启SSL8443端口的方法 【文章内容仅供参考】
- 产品经理——从一块钱看产品推广方案
- 从B树、B+树、B*树谈到R 树
- 清除缓存
- delphi 异形窗体可半透明
- HDU3757
- sublime text 侧边栏样式修改
- 实现计算机空闲一段时间自动锁屏
- DevExpress VCL for Delphi 各版本收集下载(最新支持Delphi XE 7)
- 作死向之C++告别演出——课程设计(银行储蓄系统(大BUG+功能不完整版))
- Delphi 自带了 Base64 编解码的单元
- linux编译动态库和静态库的makefile示例
- delphi 一个关于xml文件导入数据库的问题