即:Flash里透明度从100变为0的过程
解决方案 »
- 用TAcroPDF如何获取用户选择的pdf中的文字
- 请教一下DBGRIDEH的操作
- 两个MODEM,使用APRO控件的两个ApdTapiDevice, 不能同AutoAnswer,有什么办法?
- 在何监视公司邮件及上网记录??
- 如何将ADOConnection中连接数据库的配置通过.ini文件来修改
- 用ADO能够备份但是不能恢复,也不报错,请高手看看!!!!!
- 如何正确调用重载函数?
- 借问,闪屏是怎么做出来的?
- Socket连接的安全问题!
- 关于“在Chart上用十字丝选点”的一个小问题
- dbgrid 问题!我想实现用虚行(空白行)来填满整个DBGRID并可以任意编辑某一行!!!!
- bit 字段问题,在线高分
相关链接:半透明源代码 用过Win2000的朋友肯定知道Win2000的“半透明效果”,可以透视背景,或底层的其他位图,而不是通常文章所介绍的透明效果(即没有背景或不显示位图中的白色背景)。“半透明效果”在一些程序中也已经有所探讨,但均局限于Windows2000环境,本文讨论在Windows98环境中“半透明效果”的一种实现方法。由于Delphi在RAD方面的优势,所以本文使用Delphi作为开发工具,看过本文以后,你会发现原来用Delphi实现是这么简单(用VC的朋友可以在我的主页Http://xpmao.8u8.com下载用VC实现的例子)。 我们知道,在Delphi中生成一个新的窗口时,会生成一个长方形的窗口并盖住背景,为了实现半透明效果,首先就得实现“透明”的效果,为此,我们需要截获WM_ERASEBKGND消息,传递给Windows一个处理过的标志就可以了。这样,我们程序的背景使用的就是原来处于窗体之后的背景,我们所要做的就是在这个背景上再加上我们的图片就可以了。为此,需要调用Windows98系统msimg32.dll中提供的AlphaBlend函数,其原型为:AlphaBlend( HDC hdcDest,//目标设备场景句柄 int nXOriginDest, //指定目标矩形左上角的x坐标 int nYOriginDest,//指定目标矩形左上角的y坐标 int nWidthDest,//指定目标矩形宽度 int hHeightDest,//指定目标矩形高度 HDC hdcSrc, //源设备场景句柄 int nXOriginSrc,//指定源矩形左上角的x坐标 int nYOriginSrc,//指定源矩形左上角的y坐标 int nWidthSrc,//指定源矩形宽度 int nHeightSrc,//指定源矩形高度 BLENDFUNCTION blendFunction //设定AlphaBlend处理的参数);? 具体编程过程如下:以SemiTran为名建立新的工程,文件另存为uSemiTransparent.pas,将窗体重命名为frmSemiTransparent,接下来,给窗体添加一个计时器(命名为tmrShowBitmap)、一个Image控件(命名为imgSrc),设置imgSrc的Picture属性,调入图片文件备用。使用Image控件的好处是不用调用CreateCompatibleDC来建立源设备场景。以下是用DELPHI5.0实现的具体例程,在Win98环境中测试通过,你可以根据注释很快在你的计算机上进一步完善,如有纰漏,欢迎来信探讨,[email protected]。
//窗体实现文件unit uSemiTransparent;interface
uses ......//为节省编幅,常用模块在本文中省略
//窗体类
type TfrmSemiTransparent = class(TForm)
//用于保存图片的控件
imgSrc: TImage;
//控制透明程度的时钟
tmrShowBitmap: TTimer;
procedure tmrShowBitmapTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
//使用Message关键字进行消息截获
procedure OnEraseBkgnd(var Message:TWMEraseBkgnd); Message WM_EraseBkgnd;
end;
var frmSemiTransparent: TfrmSemiTransparent;
bf:_BLENDFUNCTION; //AlphaBlend透明函数结构
nWidth :Integer; //图片宽度
nHeight :Integer; //图片高度
nCount: Integer; //透明度
implementation
{$R *.DFM}//截获WM_EraseBkgnd消息,实现透明背景
procedure TfrmSemiTransparent.OnEraseBkgnd(var Message: TWMEraseBkgnd);begin
Message.Result := 1; //设置消息已处理标志
end;//时钟事件处理函数
procedure TfrmSemiTransparent.tmrShowBitmapTimer(Sender: TObject);
begin
nCount := nCount +1;
if nCount>250 then
begin
tmrShowBitmap.Enabled := False;
frmSemiTransparent.Hide;
frmSemiTransparent.Close;
end;
bf.SourceConstantAlpha := nCount; //设置透明程度
AlphaBlend( frmSemiTransparent.Canvas.Handle,//窗口设备句柄
0,
0,
nWidth,
nHeight,
imgSrc.
Canvas.Handle, //保存图片的设备句柄
0,
0,
nWidth,
nHeight,
bf);
end;//初始化变量和窗口类型
procedure TfrmSemiTransparent.FormCreate(Sender: TObject);
begin
//设置窗口为无边框类型
frmSemiTransparent.BorderStyle := bsNone;
//设置窗口为屏幕居中
frmSemiTransparent.Position := poDesktopCenter;
nWidth := imgSrc.Width;
nHeight := imgSrc.Height;
nCount := 0;
//传递给AlphaBlend的结构
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.SourceConstantAlpha := nCount;
bf.AlphaFormat := 0;
//用图片大小设置窗口大小
SetWindowPos(Handle,HWND_TOP, 0,0,nWidth-1, nHeight-1,0);
tmrShowBitmap.Enabled :=True;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TfrmSemiTransparent = class(TForm)
tmrshowbitmap: TTimer;
Imgsrc: TImage;
procedure tmrshowbitmapTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure OnEraseBkgnd(Var Message:TWMEraseBkgnd);Message WM_EraseBkgnd;
end;var
frmSemiTransparent: TfrmSemiTransparent;
bf:_BLENDFUNCTION;
nWidth: integer;
nHeight: Integer;
nCount: integer;//透明度
implementation{$R *.dfm}procedure TfrmSemiTransparent.OnEraseBkgnd(Var Message:TWMEraseBkgnd);
begin
Message.Result := 1;
End;procedure TfrmSemiTransparent.tmrshowbitmapTimer(Sender: TObject);
begin
nCount := nCount+1;
if nCount>250 then
begin
tmrshowbitmap.Enabled := false;
frmSemiTransparent.Hide;
frmSemiTransparent.Close;
End;
bf.SourceConstantAlpha := nCount;
AlphaBlend(frmSemiTransparent.Canvas.Handle,0,0,nWidth,nheight,ImgSrc.Canvas.Handle,0,0,nWidth,nHeight,bf);//该行编译不通过,报错内容在后边注释
end;procedure TfrmSemiTransparent.FormCreate(Sender: TObject);
begin
frmSemiTransparent.BorderStyle := bsNone;
frmSemiTransparent.Position := PoDesktopCenter;
nWidth := ImgSrc.Width;
nHeight := ImgSrc.Height;
nCount := 0;
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.SourceConstantAlpha := nCount;
bf.AlphaFormat := 0;
SetWindowPos(Handle,HWND_TOP,0,0,nWidth-1,nHeight-1,0);
tmrshowbitmap.Enabled := true;
end;end.
//报错信息,我在Delphi7.0下边
[Error] USemiTransparent.pas(49): Missing operator or semicolon
[Error] USemiTransparent.pas(49): Statement expected, but expression of type 'Boolean' found
[Fatal Error] SemiTran.dpr(5): Could not compile used unit 'USemiTransparent.pas'