调用WindowsAPI。每
当生成一个新的项目时,Delphi自动地把WinType和WinPr
ocs单元名添加到所生成单元文件中的uses子句中,这两
个单元包含了Delphi调用WindowsAPI所必须的类型定义和
例程声明。这样,只需使用正确的参数就可以直接调用Win
dowsAPI,而不需要再作其它任何声明。
BitBlt及类似的StretchBlt函数是Windows功能强大
的图形处理函数,它的功能与TCanvas的CopyRect函数一样
,不仅能够将位图或位图的一部分从一处拷贝到另一处,
它还可以根据256个不同的光栅操作码将三幅位图结合起
来,从而呈现不同的视觉效果。在WindowsAPI函数中,所
有的blt函数的鼻祖都是BitBlt函数。在Delphi中BitBlt函
数声明及参数意义如下:
functionBitBlt(DestDC:HDC;X,Y,nWidth,Hei
ght:Integer;SrcDC;HDC;XSrc,YSRC:Ingeger;Rop
:LongInt):Bool;
DestDC源设备上下文句柄
X,Y源矩形左上角坐标
nWidth,Height目标矩形的宽度和高度
SrcDC目标矩形句柄
XSrc,TSrc源位图矩形左上角坐标
Rop光栅操作码。对于简单的拷贝,其值为SRCCOPY
下面同样以一个例子来说明如何用BitBlt实现特技。
本例所实现的特技是将选定的位图从屏幕中心开始向四周
扩散,最后整个位图全部显示出来。此例的
程序清单如下
:
procedureTForm1,Button2Click(Sender:TObject
);
conststepΚ200;
var
bitmap:tbitmap;
x0,y0:integer;{屏幕中心坐标}
midx,midy:integer;
ratiox,ratioy:teal;
i:integer;
begin
bitmap:Κtbitmap.create;
bitmap.loadfromfile(edit1.text);
x0:Κround(form1.width/2);
y0:Κround(form1.height/2);
ratiox:Κbitmap.width/step;
ratioy:Κbitmap.height/step;
fori:Κ0tostepdo
begin
midx:Κround(ratiox*i);
midy:Κround(ratioy*i);
bitblt(form1.canvas.handle,x0-midx,y0-m
idy,round(ratiox*i*1),round(ratioy*i*2)
,bitmap.canvas.handle,x0-midy,y0-midy,,src
copy);
end;
bitmap.free;
end.