p; int nYOriginSrc,//源绘图矩形的Y坐标
int nWidthSrc,//源绘图矩形的宽度
int nHeightSrc,//源绘图矩形的高度
UINT crTransparent//设置透明色RGB(r,g,b)
);
注意:
Windows NT: 需要5.0或以上版本
Windows: 需要 Windows 98 或 以上版本
其它低版本不支持。
此函数包含在msimg32.dll.
笔者定义了一个tranbit函数来动态调用TransparentBlt函数,具体定义见第三节。
4.将第二步生成的内存位图拷贝到桌面。这样一帧动画就显示完成。不断循环1-4步,你就能看到连续的动画场景了。
3.具体代码
以下是一个演示
程序,在DELPHI5.0+WINDOWS2000P中调试通过。创建一个窗体Form1,放上两个Image控件,命名为Image1,Image2,再放上一个Timer控件,命名为Timer1。准备两张位图,一张放入Image1,另一张放入Image2。笔者用了如下样式的位图(截取了一部分),你可以自己画动画对象,也可以借用别人的,笔者就是用微软画的
图片。
从图片你可以看出,图片中包括了许多连续的动画帧,一张
图片完成一个动作,如旋转一周等,每帧动画大小完全一样,除了动画对象其它像素用一种透明色填充。好了你可以看具体的代码了。
unit Unitmain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,mmsystem;
type
TForm1 = class(TForm)
Timer1: TTimer;//爆炸定时器
Image1: TImage;//储存爆炸的
图片 Image2: TImage;//储存飞行器的
图片 procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
DeskTopDC:HDC;//桌面窗口的图形设备描述表句柄
stop:boolean;//控制循环的变量
expnum:integer;//爆炸的当前次数
procedure Explode(X:integer;Y:integer);//爆炸函数
procedure shipmove(X:integer;Y:integer);//飞行器函数
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//保存桌面背景
procedure savebackground(BKCanvas :TCanvas;
&nbs