---===制作全透明的窗口===---

news/2023/11/30 10:46:10
怎样制作全透明的窗口
2000-08-01· -·逸仙时空

  我不知道全透明的窗口有什么用,但毕竟作为一种技巧,还是拿出来说说吧。下面这个例子演示如何显示透明的窗口.同时也介绍了如何捕获屏幕.必须把Form1的BorderStyle属性置为bsNone

  

  C++ Builder

  请参照Delphi的例子

 
Delphi

unit homepage_coolform;interfaceuses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs

ExtCtrls, StdCtrls, Buttons;

type TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private { Private declarations }

public { Public declarations }

hbmp:integer;

end;

var Form1: TForm1;

implementation

{$R *.DFM}

function CopyScreenToBitmap(Rect:TREct):integer;

var

hScrDC, hMemDC, hBitmap, hOldBitmap:integer;

nX, nY, nX2, nY2: integer;

nWidth, nHeight:integer;

xScrn, yScrn:integer;

begin

if (IsRectEmpty(Rect)) then

begin

result:= 0;

exit;

end; // 获得屏幕缓冲区的句柄.

// a memory DC compatible to screen DC

hScrDC:= CreateDC('DISPLAY', pchar(0), pchar(0), PDeviceModeA(0));

hMemDC:= CreateCompatibleDC(hScrDC);

// get points of rectangle to grab

nX := rect.left;

nY := rect.top;

nX2 := rect.right;

nY2 := rect.bottom;

// get screen resolution

xScrn:= GetDeviceCaps(hScrDC, HORZRES);

yScrn := GetDeviceCaps(hScrDC, VERTRES);

//make sure bitmap rectangle is visible

if (nX <0) then

nX :="0;"

if (nY < 0) then

nY :="0;"

if (nX2> xScrn) then

nX2 := xScrn;

if (nY2 > yScrn) then

nY2 := yScrn;

nWidth := nX2 - nX;

nHeight := nY2 - nY;

// create a bitmap compatible with the screen DC

hBitmap := CreateCompatibleBitmap(hScrDC, nWidth, nHeight);

// select new bitmap into memory DC

hOldBitmap := SelectObject(hMemDC, hBitmap);

// bitblt screen DC to memory DC

BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);

// select old bitmap back into memory DC and get handle to

// bitmap of the screen

hBitmap := SelectObject(hMemDC, hOldBitmap);

// clean up

DeleteDC(hScrDC);

DeleteDC(hMemDC);

result:= hBitmap;

end;

procedure TForm1.FormShow(Sender: TObject);

Var

rect:TRect;

p:TPoint;

begin

rect:=ClientRect;

p:=ClientOrigin;

rect.left:=p.x;

rect.top:=p.y;

rect.bottom:=rect.bottom+p.y;

rect.right:=rect.right+p.x;

hbmp:=copyScreenToBitmap(rect);

inherited;

end;

procedure TForm1.FormPaint(Sender: TObject);

var

bitmap:TBitmap;

rect:TRect;

begin

bitmap:=TBitmap.create;

bitmap.handle:=hbmp;

rect:=ClientRect;

canvas.draw(rect.left,rect.top,bitmap);

bitmap.handle:=0;

bitmap.free;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

DeleteObject(hbmp);

end;

end.




怎样制作全透明的窗口
2000-08-01· -·逸仙时空

  我不知道全透明的窗口有什么用,但毕竟作为一种技巧,还是拿出来说说吧。下面这个例子演示如何显示透明的窗口.同时也介绍了如何捕获屏幕.必须把Form1的BorderStyle属性置为bsNone

  

  C++ Builder

  请参照Delphi的例子

 
Delphi

unit homepage_coolform;interfaceuses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs

ExtCtrls, StdCtrls, Buttons;

type TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private { Private declarations }

public { Public declarations }

hbmp:integer;

end;

var Form1: TForm1;

implementation

{$R *.DFM}

function CopyScreenToBitmap(Rect:TREct):integer;

var

hScrDC, hMemDC, hBitmap, hOldBitmap:integer;

nX, nY, nX2, nY2: integer;

nWidth, nHeight:integer;

xScrn, yScrn:integer;

begin

if (IsRectEmpty(Rect)) then

begin

result:= 0;

exit;

end; // 获得屏幕缓冲区的句柄.

// a memory DC compatible to screen DC

hScrDC:= CreateDC('DISPLAY', pchar(0), pchar(0), PDeviceModeA(0));

hMemDC:= CreateCompatibleDC(hScrDC);

// get points of rectangle to grab

nX := rect.left;

nY := rect.top;

nX2 := rect.right;

nY2 := rect.bottom;

// get screen resolution

xScrn:= GetDeviceCaps(hScrDC, HORZRES);

yScrn := GetDeviceCaps(hScrDC, VERTRES);

//make sure bitmap rectangle is visible

if (nX <0) then

nX :="0;"

if (nY < 0) then

nY :="0;"

if (nX2> xScrn) then

nX2 := xScrn;

if (nY2 > yScrn) then

nY2 := yScrn;

nWidth := nX2 - nX;

nHeight := nY2 - nY;

// create a bitmap compatible with the screen DC

hBitmap := CreateCompatibleBitmap(hScrDC, nWidth, nHeight);

// select new bitmap into memory DC

hOldBitmap := SelectObject(hMemDC, hBitmap);

// bitblt screen DC to memory DC

BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);

// select old bitmap back into memory DC and get handle to

// bitmap of the screen

hBitmap := SelectObject(hMemDC, hOldBitmap);

// clean up

DeleteDC(hScrDC);

DeleteDC(hMemDC);

result:= hBitmap;

end;

procedure TForm1.FormShow(Sender: TObject);

Var

rect:TRect;

p:TPoint;

begin

rect:=ClientRect;

p:=ClientOrigin;

rect.left:=p.x;

rect.top:=p.y;

rect.bottom:=rect.bottom+p.y;

rect.right:=rect.right+p.x;

hbmp:=copyScreenToBitmap(rect);

inherited;

end;

procedure TForm1.FormPaint(Sender: TObject);

var

bitmap:TBitmap;

rect:TRect;

begin

bitmap:=TBitmap.create;

bitmap.handle:=hbmp;

rect:=ClientRect;

canvas.draw(rect.left,rect.top,bitmap);

bitmap.handle:=0;

bitmap.free;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

DeleteObject(hbmp);

end;

end.





http://www.niftyadmin.cn/n/3648519.html

相关文章

react中使用构建缓存_如何在React中构建密码强度计

react中使用构建缓存介绍 (Introduction) Passwords are commonly used for user authentication in most web applications. Because of this, it is important that passwords are stored in a safe way. Over the years, techniques such as one-way password hashing have …

android进阶-系统架构篇

系统架构 博客和简书 我的博客:https://blog.csdn.net/qq_24675479 我的简书:https://www.jianshu.com/u/3ff32f5aea98 软件架构 01.面向对象六大基本原则 - 网络引擎切换 https://blog.csdn.net/qq_24675479/article/details/79435620 02.AOP面向切面编程 - 淘宝京东网…

mysql触发器(Trigger)简明总结和使用实例

一&#xff0c;什么触发器 1&#xff0c;个人理解 触发器&#xff0c;从字面来理解&#xff0c;一触即发的一个器&#xff0c;简称触发器&#xff08;哈哈&#xff0c;个人理解&#xff09;&#xff0c;举个例子吧&#xff0c;好比天黑了&#xff0c;你开灯了&#xff0c;你看到…

---===在Windows95/98中实现苹果窗口界面(vc6)===---

在Windows95/98中实现苹果窗口界面高波 马惠业 有没有想过在Windows环境下实现苹果电脑窗口界面的风格&#xff1f;下面就以实现苹果电脑窗口风格为例&#xff0c;进行一次奇妙的旅行。 原 理 仔细观察苹果窗口&#xff0c;发现和Windows窗口的区别主要体现在标题栏和控制按钮&…

node mocha_如何使用Mocha和Assert测试Node.js模块

node mochaThe author selected the Open Internet/Free Speech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“ 开放互联网/言论自由基金会”作为“ Write for DOnations”计划的一部分来接受捐赠。 介绍 (Introduction) Testing is …

新闻类App (MVP + RxJava + Retrofit+ARouter)

新闻类App &#xff08;MVP RxJava RetrofitDaggerARouter&#xff09; 整体开发基于MVP RxJava RetrofitDaggerARouterretrofitdagger2rxjavaRxLifecycleARouterUtilsBannerGildePhotoViewGitHub 项目地址 : https://github.com/RangersEZ/gankzhihu 效果图 最后 感谢开…

读写锁厨师_配置管理101:编写厨师食谱

读写锁厨师In a nutshell, server configuration management (also popularly referred to as IT Automation) is a solution for turning your infrastructure administration into a codebase, describing all processes necessary for deploying a server in a set of provi…

新闻类App (MVP + RxJava + Retrofit+Dagger+ARouter)新增功能

新闻类App &#xff08;MVP RxJava RetrofitDaggerARouter&#xff09; 整体开发基于 MVPRxJavaRetrofitDaggerARouterretrofitdagger2rxjavaRxLifecycleARouterUtilsBannerGildePhotoViewJiaoZiVideoPlayerandroid-gif-drawableGitHub 项目地址 : https://github.com/Peakm…

---===浅谈位图的淡入淡出和渐隐===---

浅谈位图的淡入淡出和渐隐成都电子科技大学朱宁在许多游戏和屏幕保护程序中&#xff0c;我们都可以发现位图的淡入淡出和渐隐&#xff08;一幅图象渐渐的消失于另一幅图象中&#xff09;的应用。如何实现这些效果呢&#xff1f;在windows(GDI)环境下&#xff0c;实现位图的淡入…

深入理解RESTful 架构

What? Wikipedia: 表征性状态传输&#xff08;英文&#xff1a;Representational State Transfer&#xff0c;简称REST&#xff09;是Roy Fielding博士于2000年在他的博士论文中提出来的一种软件架构风格。 Roy Fielding是HTTP协议&#xff08;1.0版和1.1版&#xff09;的主要…

基本UI组件的封装库——basicUI

BasicUI 目前BasicUI包括了&#xff1a;1、Recycleview的封装&#xff0c;支持单布局和多布局&#xff0c;支持添加头部和底部&#xff0c;还包括了悬浮列表的基本封装。2、dialog的封装。支持从底部弹出&#xff0c;并可设置动画&#xff0c;是否宽度全屏等样式。3、Navigati…

freebsd 9.1.1_如何在FreeBSD 12.1上配置数据包过滤器(PF)

freebsd 9.1.1The author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program. 作者选择了COVID-19救济基金来接受捐赠&#xff0c;这是Write for DOnations计划的一部分。 介绍 (Introduction) The firewall is arguably …

Joost行不行?Joost模式在中国行不行?

郑昀 20071015Joost行不行?Joost模式在中国行不行?先把问题搁在这儿。郑治连着三篇也挑起了我的兴趣&#xff1a;《Joost模式&#xff1a;互联网上的电视网》&#xff0c;《VeohTV&#xff1a;能成为Joost杀手吗&#xff1f;》和《什么才是Joost杀手&#xff1f;》。 最初用了…

服务器tomcat,Jboss,weblogic区别与比较

一、tomcatTomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;它是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支…

基本UI组件的封装库(四)——basicU

以下是我的基本UI组件该系列的文章&#xff0c;欢迎大家转载和分享&#xff1a; 基本UI组件的封装库(一)——basicUI 基本UI组件的封装库(二)——basicUI 基本UI组件的封装库——basicUI的demo的编写 基本UI组件的封装库(三)——basicUI 前言 我在之前BasicUI项目一共包括了&a…

如何在Visual Studio Code中开始使用Python

介绍 (Introduction) Python is one of the most popular and easy to learn languages, which is why it is often one of the first languages you learn. Let’s see how to work with and run Python inside of Visual Studio Code. Python是最流行和易于学习的语言之一&am…
最新文章