Delphi异形窗口之PNG

 1 //1.单元内容
 2 unit UnitAlienForm;
 3 interface
 4 uses
 5   Windows, Forms, Classes, Graphics;
 6 //从文件加载PNG
 7 procedure AlienForm_PNGFromFile(AForm : TForm; AFileName : String);
 8 //从资源加载PNG
 9 procedure AlienForm_PNGFromResource(AForm : TForm; ResName : String; ResType : PWideChar; Instance : HINST = 0);
10 //从图像对象加载
11 procedure AlienForm_PNGFromGraphic(AForm : TForm; AGraphic : TGraphic);
12 implementation
13 procedure AlienForm_PNGFromFile(AForm : TForm; AFileName : String);
14 var
15   wic : TWICImage;
16 begin
17   wic := TWICImage.Create;
18   wic.LoadFromFile(AFileName);
19   AlienForm_PNGFromGraphic(AForm, wic);
20   wic.Free;
21 end;
22 procedure AlienForm_PNGFromResource(AForm : TForm; ResName : String;ResType : PWideChar; Instance : HINST);
23 var
24   wic : TWICImage;
25   r : TResourceStream;
26 begin
27   if Instance = 0 then
28     Instance := HInstance;
29   r := TResourceStream.Create(Instance, ResName, ResType);
30   wic := TWICImage.Create;
31   wic.LoadFromStream(r);
32   AlienForm_PNGFromGraphic(AForm, wic);
33   wic.Free;
34   r.Free;
35 end;
36 procedure AlienForm_PNGFromGraphic(AForm : TForm; AGraphic : TGraphic);
37 var
38   ptDst, ptSrc: TPoint;
39   Size: TSize;
40   BlendFunction: TBlendFunction;
41   bmp : TBitmap;
42 begin
43   bmp := TBitmap.Create;
44   bmp.Assign(AGraphic);
45   ptDst := Point(AForm.Left, AForm.Top);
46   ptSrc := Point(0, 0);
47   Size.cx := AGraphic.Width;
48   Size.cy := AGraphic.Height;
49   BlendFunction.BlendOp := AC_SRC_OVER;
50   BlendFunction.BlendFlags := 0;
51   BlendFunction.SourceConstantAlpha := $FF; // 透明度
52   BlendFunction.AlphaFormat := AC_SRC_ALPHA;
53   SetWindowLong(AForm.Handle, GWL_EXSTYLE, GetWindowLong(AForm.Handle,
54       GWL_EXSTYLE) or WS_EX_LAYERED);
55   UpdateLayeredWindow(AForm.Handle,
56      AForm.Canvas.Handle,
57      @ptDst,
58      @Size,
59      bmp.Canvas.Handle,
60      @ptSrc,
61      0,
62      @BlendFunction,
63      ULW_ALPHA);
64   bmp.Free();
65 end;
66 end.
67
68 //2.调用方法
69 procedure TForm2.FormCreate(Sender: TObject);
70 begin
71   AlienForm_PNGFromFile(Form2, ‘E:\未标题.png‘);
72 end;

http://www.cnblogs.com/FKdelphi/p/5843038.html

时间: 2024-10-15 13:28:03

Delphi异形窗口之PNG的相关文章

Png异形窗口

同事演示了一个.NET的的PNG异形窗口.挺漂亮.于是也想用Delphi显摆一个. 关于Delphi用PNG做异形窗口的资料有不少.都是用GDIPlus或者TPNGImage组件加载PNG图像做的. 好在Delphi包装了微软的IWICImagingFactory接口,这样处理PNG的工作就交给操作系统去做了. 函数很简单一共就几行,关键就是UpdateLayeredWindow. 用Delphi2010提供的IWICImagingFactory接口的包装了,这次PNG的处理交给微软的操作系统了

QT中异形窗口的绘制(winEvent处理WM_NCHITTEST消息)

这里讨论的只是Windows平台上的实现. 在QT中绘制异形窗口,只要设定 windowFlag 为 CustomizeWindowHint,再结合setMask()就可以做出各种奇形怪状的窗口.相对来说比较麻烦的, 是进行窗口拖动和缩放的处理. 在 Windows SDK 和 MFC 中比较容易,只要处理 WM_NCHITTEST,返回相应的测试值就可以了.幸运的是,QT中也提供了直接处理各平台消息的方法,在 Windows下只需要重载winEvent方法. 下面给出了示例代码: // inc

delphi 遍历窗口

function EnumWindowsProc(hwnd: HWND; lparam: LPARAM): Boolean; stdcall; var buf: array[Byte] of Char; begin Result:= True; GetWindowText(hwnd, buf, SizeOf(buf)); Form1.Memo1.Lines.Add(buf); Form1.Memo1.Lines.Add(IntToStr(hwnd)); end; procedure TForm1

Delphi 悬浮窗口、浮动窗口的实现

源:Delphi 悬浮窗口.浮动窗口的实现 浮动窗体的实现 http://blog.tianya.cn/blogger/post_show.asp?BlogID=68097&PostID=806089 需要一个这样的窗体:a:没有标题栏; b:可以改变大小; c:不在任务栏上显示图标; d:如果不是主窗体,它的最小化不受主窗体的限制; e:在最顶端显示 处理:a:不在任务栏出现的,只要设置窗体的属性为ToolWindow就可以了.b:要想使窗体脱离主窗体的限制,必须修改它的ParentWnd,使

使用Unity3d做异形窗口

项目马上上线,因为之前的登录器是使用VS2010的MFC做的,在很多电脑上会提示缺失mfcXXXX.dll,中间找寻这种解决方案,最后确定将vcredist2010_x86和我的程序打包到安装包里面,每次安装的时候默认先安装vcredist2010_x86. 由此,经常被杀毒软件阻止,而且还有x64 or x86的区别. 同时,甲方想要一个精灵,类似于QQ宠物,于是PL决定使用精灵模型+异形窗口做一个桌面宠物.于是,异形窗口成了此物的基础. 首先,我们需要了解的是,异形窗口是什么.简单来说,即将

在Delphi的窗口单元中,如何调用其它窗口的单元。

在Delphi的窗口单元中,如何调用其它窗口的单元.(转载) . 在Delphi中简单的调用单元 unit实例 一,新建一个工程文件,默认的文件是unit1,代码如下:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton;

Delphi主窗口任务栏菜单的问题(转发WM_SYSCOMMAND到Application)

Delphi的VCL框架在创建应用时TApplication是一个自动创建的隐藏窗口,其它创建的窗口是自动以该窗口为窗口,这就导致创始的主窗口在任务栏的系统菜单只有三项,只要在主窗口的Create事件中将系统菜单用Application的系统菜单替换,并将SysCommand消息转发到主窗口就正常了. unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo

Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)

有的时候我们要实现一个悬浮窗口,并使该窗口一直显示在桌面的工作区内.即整个窗口要一直显示在屏幕上,不能超出屏幕的上下左右边缘.此功能的实现也不难,我们需要自己写代码来响应窗口的WM_WINDOWPOSCHANGING消息,话不多说,详细代码如下供参考: 新建一个工程,并把下面代码拷贝到工程中,运行…… Delphi/Pascal 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

c# UpdateLayeredWindow异形窗口

#region UpdateLayeredWindow #region 重写窗体的 CreateParams 属性 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00080000; // WS_EX_LAYERED 扩展样式 //无边框任务栏窗口最小化 const int WS_MINIMIZEBOX = 0x00020000; /