如何实现像讯雷5启动时右下角的透明广告效果?(300)

  • 主题发起人 主题发起人 whbest
  • 开始时间 开始时间
W

whbest

Unregistered / Unconfirmed
GUEST, unregistred user!
迅雷5启动时,右下角一般会弹出一个透明的广告窗口(XLtipe),感觉不错,有Png透明的感觉,不知如何才能实现这种方式,设置Delphi中的AlphaBlend与AlphablendValue是全部透明,TransParentColor也只是过滤一种颜色,而不能让表单上的图片平滑的过度!
 
你可以使用GDI+实现的。我前几天刚刚实现了一个这样的窗体。只要你选择的png图片的效果好。做出的窗体是绝对的漂亮。必须的 GDIPOBJ 这个单元从网上搜一下,好几个单元,实现了WindowsGDI+的功能给你一段代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ExtCtrls, PngImage, jpeg;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure N2Click(Sender: TObject); procedure N1Click(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public AppPath: string; procedure SetBack(FileName: string); { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}uses ActiveX, GDIPOBJ;procedure TForm1.FormCreate(Sender: TObject);begin AppPath := ExtractFilePath(Application.ExeName); //这句是必须有的. SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); SetBack(AppPath + 'test.png');end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin ReleaseCapture; Perform(WM_SYSCOMMAND, SC_MOVE or HTCLIENT, 0); // 拖动 end;//这是关键的透明代码procedure TForm1.SetBack(FileName: string);var vBitmap: HBITMAP; vOldBitmap: HBITMAP; vPoint1, vPoint2: TPoint; vSize: TSize; vBlendFunction: TBlendFunction; vDC: HDC; vBitmapInfo: TBitmapInfoHeader; vDIBSection: TDIBSection; gpbmp: TGPBitmap;begin gpbmp := TGPBitmap.Create(FileName); vBitmapInfo.biSize := SizeOf(vBitmapInfo); gpbmp.GetHBITMAP(0, vBitmap); GetObject(vBitmap, SizeOf(vDIBSection), @vDIBSection); vPoint1 := Point(Left, Top); vPoint2 := Point(0, 0); vSize.cx := vDIBSection.dsBm.bmWidth; vSize.cy := vDIBSection.dsBm.bmHeight; vBlendFunction.BlendOp := AC_SRC_OVER; vBlendFunction.BlendFlags := 0; vBlendFunction.SourceConstantAlpha := $FF; // 透明度 vBlendFunction.AlphaFormat := AC_SRC_ALPHA; //同上 vDC := CreateCompatibleDC(Canvas.Handle); vOldBitmap := SelectObject(vDC, vBitmap); self.Width := vSize.cx; self.Height := vSize.cy; UpdateLayeredWindow(Handle, Canvas.Handle, @vPoint1, @vSize, vDC, @vPoint2, 0, @vBlendFunction, ULW_ALPHA); SelectObject(vDC, vOldBitmap); DeleteDC(vDC); DeleteObject(vBitmap); gpbmp.Free; end;procedure TForm1.N2Click(Sender: TObject);begin Application.Terminate;end;procedure TForm1.N1Click(Sender: TObject);var OD: TOpenDialog;begin OD := TOpenDialog.Create(self); OD.Filter := '*.*|*.jpg;*.ico;*.bmp;*.gif;*.png;*.jpeg'; if OD.Execute then begin SetBack(OD.FileName); end; FreeAndNil(OD); end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);begin if Key = #27 then Application.Terminate;end;end.
 
请问是否可以把chrome嵌入到自己的应用程序中?开发Web浏览小工具,要求如下:1、内嵌Google浏览器。2、运行程序可以读取配置文件中设置的URL,并在内嵌的Google浏览器中打开。3、内嵌Google浏览器要求不允许显示浏览器地址栏等信息,只显示页面。能完成此工具的可以走外包形式。联系人: 林先生电话: 13683611366
 
实际查了一下,发觉迅雷是用透明的swf做的,我也尝试在delphi中利用transparentcolor做透明,但是一样的swf,透明的效果就不及迅雷的,迅雷的可做得到完且透明(类似png的透明)
 
To 草原骏马 试了一下你的代码,静态png的效果不错,但是迅雷的是swf动态的,不知可不可以也实现呢?
 
To 草原骏马 还有就是如果在上面添加其它控件,控件也不会显示出来了!
 
现在下了个FlashPlayerControl控件在试,看了演示版本,好像能行!
 
GDIPOBJ在那有?
 
自已搞定了,送分咯!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
783
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部