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图片做半透明异型窗口的更多相关文章
- GDI+用PNG图片做半透明异型窗口
http://hi.baidu.com/bluew/blog/item/2ecbe58bf93a937d9f2fb4de.html2007-08-09 00:52 我是用PNG图片Alpha透明的方式 ...
- 【C++自绘控件】如何用GDI+来显示图片
在我们制作一个应用软件的时候往往需要在窗口或控件中添加背景图.而图片不仅有BMP格式的,还有JPEG.PNG.TIFF.GIF等其它的格式.那么如何用jpg格式的图片来当背景呢? 这里用到了GDI+, ...
- background-clip 背景图片做适当的裁剪
background-clip 用来将背景图片做适当的裁剪以适应实际需要. 语法: background-clip : border-box | padding-box | content-box | ...
- 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 1.cv2.pyrDown(对图片做向下采样) 2.cv2.pyrUp(对图片做向上采样)
1.cv2.pyrDown(src) 对图片做向下采样操作,通常也可以做模糊化处理 参数说明:src表示输入的图片 2.cv2.pyrUp(src) 对图片做向上采样操作 参数说明:src表示输入的 ...
- [翻译] MCProgressView 使用自定义图片做进度显示
MCProgressView 使用自定义图片做进度显示 https://github.com/Baglan/MCProgressView Progress bar view with custom i ...
- python 对图片做垂直投影
Python 对图片做垂直投影 本文利用opencv对图片进行垂直投影,做出垂直投影图,大体思路:打开图片,灰度化,二值化,按列进行统计,新建一个大小和原图一样的图片,按列进行填充: cv2.cv.G ...
- GDI+中GIF图片的显示
某位网友曾经问过我GDI+中Gif图像显示的问题,一直没时间给你写,在此致歉.我把这篇文章送给他. 一.GIF格式介绍 1.概述 GIF(Graphics Interchange Format,图形交 ...
- IE6 png图片实现半透明的方法
IE6中支持PNG半透明图片完美解决方法-divcss5亲測 从IE7及IE7以上版本号都支持PNG半透明格式图片,而只有IE6不支持png格式透明图片,而GIF半透明效果不及png半透明格式图片,由 ...
- GDI+ 支持的图片文件格式
您可以使用许多标准格式将位图储存在磁盘文件中.GDI+ 支持以下各种图片文件格式. o 位图 (BMP) 位图是 Windows 用来储存设备无关和与应用程序无关的图片的标准格式.文件头决定了指定的位 ...
随机推荐
- 利用shell找出15分钟内修改的文件
如果你的文件只是生成不会修改的话,可以这样: find * -mmin -15 2>/dev/null 如果可能修改,则需要这样(先创建一个 15 分之前的时间戳的文件,然后找比这个文件新的文件 ...
- 006_mac osx 应用跨屏幕
一般情况下 mac osx 中一个应用程序只能在一个屏幕上显示,作为从 windows 转过来的用户有点不太习惯,Goolge 后发现还是有解决方案的(虽然不是很好用). 打开 Mac 的系统偏好设置 ...
- Debian/Ubuntu安装WPS (转)
卸载libreoffice sudo apt-get remove --purge libreoffice* 官网下载WPShttp://wps-community.org/downloads?vl= ...
- ruby on rails在fedora18上install
ruby on rails 在fedora18下的安装 天朝的网络原因,安装不是很顺畅,所以把过程记录下备用 前面下载rubygem什么的都比较快,新建一个project的时候会出问题 gem new ...
- Java编程的逻辑 (2) - 赋值
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Video.js 简单的使用介绍
vedio.js 是一款视频播放插件,它会自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器.下面来介绍下它的使用: 引用video-js.cs样式文件和 ...
- Jenkins 发布.NetCore 项目
安装最新Jenkins及安装好相关git插件 启动jenkins服务,访问8080端口 这里就发布一个IdentityServer4程序 配置相关参数 设置Git源码管理配置 构建执行window 批 ...
- 【LOJ】#2585. 「APIO2018」新家
题解 成功把自己写自闭了 离散化之后再二分我是真不会算坐标啊我这个zz 先离散化所有坐标,然后对于每个位置维护一个最小前驱,然后线段树区间维护最小前驱 什么?位置一样?那就给每个大小为1的位置开个mu ...
- Caffe训练AlexNet网络模型——问题三
caffe 进行自己的imageNet训练分类:loss一直是87.3365,accuracy一直是0 解决方法: http://blog.csdn.net/jkfdqjjy/article/deta ...
- P1280 尼克的任务 线性DP
题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...