1. {*******************************************************}
  2. {                                                       }
  3. {       GDI+用PNG图片做半透明异型窗口                   }
  4. {                                                       }
  5. {       版权所有 (C) 2008 QQ:3150379                    }
  6. {                                                       }
  7. {*******************************************************}
  8. unit Unit1;
  9. interface
  10. uses
  11. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  12. Dialogs,
  13. GDIPAPI, GDIPOBJ, Menus, StdCtrls;
  14. type
  15. TForm1 = class(TForm)
  16. PopupMenu1: TPopupMenu;
  17. mniClose: TMenuItem;
  18. mniChangeSkin: TMenuItem;
  19. About1: TMenuItem;
  20. Stayontop1: TMenuItem;
  21. procedure FormCreate(Sender: TObject);
  22. procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  23. Shift: TShiftState; X, Y: Integer);
  24. procedure About1Click(Sender: TObject);
  25. procedure Stayontop1Click(Sender: TObject);
  26. procedure mniChangeSkinClick(Sender: TObject);
  27. procedure mniCloseClick(Sender: TObject);
  28. private
  29. m_Blend: BLENDFUNCTION;
  30. procedure SetTransparent(lpSkinFile: WideString; nTran: integer);
  31. {   Private   declarations   }
  32. public
  33. {   Public   declarations   }
  34. end;
  35. var
  36. Form1: TForm1;
  37. implementation
  38. {$R   *.dfm}
  39. procedure TForm1.FormCreate(Sender: TObject);
  40. begin
  41. BorderStyle := bsNone;
  42. m_Blend.BlendOp := AC_SRC_OVER; //   the   only   BlendOp   defined   in   Windows   2000
  43. m_Blend.BlendFlags := 0; //   Must   be   zero
  44. m_Blend.AlphaFormat := AC_SRC_ALPHA; //This   flag   is   set   when   the   bitmap   has   an   Alpha   channel
  45. m_Blend.SourceConstantAlpha := 255;
  46. if (FileExists(ExtractFilePath(ParamStr(0)) + 'Security - Alert.png')) then
  47. SetTransparent(WideString(ExtractFilePath(ParamStr(0)) + 'Security - Alert.png'), 100);
  48. //   Stay   on   top
  49. SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
  50. end;
  51. procedure TForm1.SetTransparent(lpSkinFile: WideString; nTran: integer);
  52. var
  53. GPImage: TGPImage;
  54. GPGraph: TGPGraphics;
  55. m_Image: TGPImage;
  56. m_hdcMemory: HDC;
  57. hdcScreen: HDC;
  58. hBMP: HBITMAP;
  59. sizeWindow: SIZE;
  60. rct: TRECT;
  61. ptSrc: TPOINT;
  62. begin
  63. //   Use   GDI+   load   image
  64. GPImage := TGPImage.Create();
  65. m_Image := GPImage.FromFile(lpSkinFile);
  66. //   Create   Compatible   Bitmap
  67. hdcScreen := GetDC(0);
  68. m_hdcMemory := CreateCompatibleDC(hdcScreen);
  69. hBMP := CreateCompatibleBitmap(hdcScreen, m_Image.GetWidth(), m_Image.GetHeight());
  70. SelectObject(m_hdcMemory, hBMP);
  71. //   Alpha   Value
  72. if (nTran < 0) or (nTran > 100) then
  73. nTran := 100;
  74. m_Blend.SourceConstantAlpha := round(nTran * 2.55); //   1~255
  75. GetWindowRect(Handle, rct);
  76. GPGraph := TGPGraphics.Create(m_hdcMemory);
  77. GPGraph.DrawImage(m_Image, 0, 0, m_Image.GetWidth(), m_Image.GetHeight());
  78. sizeWindow.cx := m_Image.GetWidth();
  79. sizeWindow.cy := m_Image.GetHeight();
  80. ptSrc.x := 0;
  81. ptSrc.y := 0;
  82. //   Set   Window   style
  83. SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  84. //   perform   the   alpha   blend
  85. UpdateLayeredWindow(Handle, hdcScreen, nil,@sizeWindow, m_hdcMemory, @ptSrc, 0, @m_Blend, ULW_ALPHA);
  86. //Release   resources
  87. GPGraph.ReleaseHDC(m_hdcMemory);
  88. ReleaseDC(0, hdcScreen);
  89. hdcScreen := 0;
  90. DeleteObject(hBMP);
  91. DeleteDC(m_hdcMemory);
  92. m_hdcMemory := 0;
  93. m_Image.Free;
  94. GPGraph.Free;
  95. end;
  96. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  97. Shift: TShiftState; X, Y: Integer);
  98. begin
  99. if (Button = mbLeft) then
  100. begin
  101. ReleaseCapture();
  102. Perform(WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
  103. end;
  104. end;
  105. procedure TForm1.About1Click(Sender: TObject);
  106. begin
  107. MessageDlg('效果还不行吧!'#13+'QQ:3150379', mtInformation, [mbOK], 0);
  108. end;
  109. procedure TForm1.Stayontop1Click(Sender: TObject);
  110. var
  111. mi: TMenuItem;
  112. WindowPos: HWND;
  113. begin
  114. mi := Sender as TMenuItem;
  115. mi.Checked := not mi.Checked;
  116. if mi.Checked then
  117. WindowPos := HWND_TOPMOST
  118. else
  119. WindowPos := HWND_NOTOPMOST;
  120. SetWindowPos(Handle, WindowPos,0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
  121. end;
  122. procedure TForm1.mniChangeSkinClick(Sender: TObject);
  123. var
  124. dlgOpen: TOpenDialog;
  125. begin
  126. dlgOpen := TOpenDialog.Create(Self);
  127. dlgOpen.Filter := 'PNG   file(*.png)|*.png';
  128. if (dlgOpen.Execute()) then
  129. begin
  130. SetTransparent(WideString(dlgOpen.FileName), 100);
  131. Invalidate();
  132. end;
  133. dlgOpen.Free;
  134. end;
  135. procedure TForm1.mniCloseClick(Sender: TObject);
  136. begin
  137. Close;
  138. end;
  139. end.

GDI+用PNG图片做半透明异型窗口的更多相关文章

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

    http://hi.baidu.com/bluew/blog/item/2ecbe58bf93a937d9f2fb4de.html2007-08-09 00:52 我是用PNG图片Alpha透明的方式 ...

  2. 【C++自绘控件】如何用GDI+来显示图片

    在我们制作一个应用软件的时候往往需要在窗口或控件中添加背景图.而图片不仅有BMP格式的,还有JPEG.PNG.TIFF.GIF等其它的格式.那么如何用jpg格式的图片来当背景呢? 这里用到了GDI+, ...

  3. background-clip 背景图片做适当的裁剪

    background-clip 用来将背景图片做适当的裁剪以适应实际需要. 语法: background-clip : border-box | padding-box | content-box | ...

  4. 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 1.cv2.pyrDown(对图片做向下采样) 2.cv2.pyrUp(对图片做向上采样)

    1.cv2.pyrDown(src)  对图片做向下采样操作,通常也可以做模糊化处理 参数说明:src表示输入的图片 2.cv2.pyrUp(src) 对图片做向上采样操作 参数说明:src表示输入的 ...

  5. [翻译] MCProgressView 使用自定义图片做进度显示

    MCProgressView 使用自定义图片做进度显示 https://github.com/Baglan/MCProgressView Progress bar view with custom i ...

  6. python 对图片做垂直投影

    Python 对图片做垂直投影 本文利用opencv对图片进行垂直投影,做出垂直投影图,大体思路:打开图片,灰度化,二值化,按列进行统计,新建一个大小和原图一样的图片,按列进行填充: cv2.cv.G ...

  7. GDI+中GIF图片的显示

    某位网友曾经问过我GDI+中Gif图像显示的问题,一直没时间给你写,在此致歉.我把这篇文章送给他. 一.GIF格式介绍 1.概述 GIF(Graphics Interchange Format,图形交 ...

  8. IE6 png图片实现半透明的方法

    IE6中支持PNG半透明图片完美解决方法-divcss5亲測 从IE7及IE7以上版本号都支持PNG半透明格式图片,而只有IE6不支持png格式透明图片,而GIF半透明效果不及png半透明格式图片,由 ...

  9. GDI+ 支持的图片文件格式

    您可以使用许多标准格式将位图储存在磁盘文件中.GDI+ 支持以下各种图片文件格式. o 位图 (BMP) 位图是 Windows 用来储存设备无关和与应用程序无关的图片的标准格式.文件头决定了指定的位 ...

随机推荐

  1. Oracle 用脚本安装第二个数据库

    安装第二个数据库: 登录oracle用户进入家目录,添加配置环境变量: vi .bash_profier ORACLE_SID=prod2   临时环境变量: $export ORACLE_HOME= ...

  2. jquery-easyui:格式化列

    主框架页面: 在主界面区会加载西区菜单点击的URL内容. <!DOCTYPE html> <html> <head> <meta charset=" ...

  3. 压缩跟踪Compressive Tracking(转)

    这位博主总结的实在太好了,从原理到论文到代码,连论文都不用看:论文:http://blog.csdn.net/zouxy09/article/details/8118360 代码部分:http://b ...

  4. SQL语句导致性能问题

    前阵子,突然收到服务器的报警信息,于是上服务器找问题,我擦,top看到mysql占的%cpu高得把我吓尿了 从以上的信息看,相信大家已经可以定位到底是那个程序导致服务器CPU负载过高了,但我们要做的是 ...

  5. PHP 5.2、5.3、5.4、5.5、5.6 对比以及功能详解

    php5.2.x php5.3.x php5.4.x php5.5.x php5.6.x 对比详解 截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已 ...

  6. Nginx服务状态的监控

    https://www.cnblogs.com/beginner-boy/p/8052908.html

  7. Net WebAPI2

    SwaggerUI ASP.Net WebAPI2   目前在用ASP.NET的 WebAPI2来做后台接口开发,在与前台做测试的时候,总是需要发送一个demo给他,但是这样很麻烦的,他还有可能记不住 ...

  8. 【LOJ】#2082. 「JSOI2016」炸弹攻击 2

    题解 想到n3发现思路有点卡住了 对于每个发射塔把激光塔和敌人按照极角排序,对于一个激光塔,和它转角不超过pi的激光塔中间夹的敌人总和就是答案 记录前缀和,用two-Points扫一下就行 代码 #i ...

  9. 对怎样充分利用安卓官方开发网站的一个简单性介绍介绍-https://developer.android.google.cn/docs/

    一,谷歌的安卓官方网站-https://developer.android.google.cn/docs/ ,在网站里面可以查询开发文档,开发指导,设计原则,制作app的例子等等,无论对于新手还是老手 ...

  10. 初探Runloop(一)

    iOS 的最大特点就是运行时. 保证运行时的就是RunLoop 1.什么是RunLoop呢? 从字面理解就是:运行循环 引用下官方文档的介绍: A run loop is an event proce ...