er;
implementation
{$R *.DFM}
procedure TForm1.DXDrawlInitialize(Sender:TObject);
begin
FSurface:=TDirectDrawSurface.Create(DXDraw1.DDraw);
{创建抽象图像表面}
end;
procedure TForm1.DXDraw1Finalize(Sender:TObject);
begin
FSurface.Free; FSurface: = nil;
{释放表面}
end;
procedure TForm1.DXDraw1RestoreSurfare(Sender:TObject);
begin
FSurface.LoadfromGraphic(DXDIB1.DIB);{将位图送入抽象表面}
end;
procedure TForm1.DXTimer1Timer(Sendsr.TObject;LagCount integer);
begin
if not DXDraw1.CanDraw then Exit;{在绘制之前检验是否允许}
DXDraw1.Surfaca.Fill(0);
x: = x + 1;
y: = y + 1;
DXDraw1.Surface.Draw(X, Y, FSurface.ClientRect,FSur face, True);
DXDraw1.Flip; {将内存中的表面再将映射入实际显存}
end;
procedure TForm1.FormActivate(Sender:TObject);
begin
X: =0;
y: =0;
end;
end.
首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX Draw在DXDraws中定义)。
程序用的Form不要从一 般的TForm派生,而应从TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,将其inter val值设为0。对DXDraw1控件改变其属性,使其与 Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bub bles.bmp。定义一个DirectDraw表面Fsurface,这是一 个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni tialize、OnFinalize、OnRestoreSurface三个过程,之后便 可以根据需要对表面进行操纵。
另外,要完成上面
程序的功能,还有其他不少办 法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。
总之,DirectX博大精深,希望本文能为大家掀开 冰山的一角。DelphiX可以在pigprince的个人主页上 找到,网址是Http://www.netease.net/~pigprins