原程序如下:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
var
Fsurface:TDirectDrawSurface;
begin
if not DXDraw1.CanDraw then Exit;
  DXDRAW1.Surface.Fill(0);
  TT:=TDIB.Create;
  Fsurface:=TDirectDrawSurface.Create(DXDraw1.DDraw);
  try
     TT.LoadFromFile('C:\1.BMP');//1.bmp的width=300,height=300;
     with TT.Canvas do
     begin
         Brush.Style:=bsClear;
         Font.Color:=clLime;
         Font.Size:=12;
         TextOut(x+1,2,'中国');
         if x>100 then
         x:=2;
     end;
    Fsurface.LoadFromGraphic(TT);
    DXDraw1.Surface.Draw(0,0,Fsurface.ClientRect,Fsurface,false);
    DXDraw1.Flip;
  finally
    tt.Free;
    Fsurface.Free;
    Fsurface:=nil;
  end;end;//(DXDraw1:640*480*16)  变量X是在CREATE中外部生成的.程序编译通过,运行时也不报错,但得不到正确的结果!
正确的结果本应是“中国”两个字在1.bmp图片上走,但
实际的结果却是静止不动!
问题:大家从程序中可以看到,我的 副Surface 是动态生成映射到 主Surface 的,然后在动态Free的,为什么 主Surface 中只得到第一次循环(DXTimer)的结果呢?

解决方案 »

  1.   


    原程序如下: 
    procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); 
    var 
    Fsurface:TDirectDrawSurface; 
    begin 
    if not DXDraw1.CanDraw then Exit; 
      DXDRAW1.Surface.Fill(0); 
      TT:=TDIB.Create; 
      Fsurface:=TDirectDrawSurface.Create(DXDraw1.DDraw); 
      try 
        TT.LoadFromFile('C:\1.BMP');//1.bmp的width=300,height=300; 
        with TT.Canvas do 
        begin 
            Brush.Style:=bsClear; 
            Font.Color:=clLime; 
            Font.Size:=12; 
            TextOut(x+1,2,'中国'); 
            x:=x+1;
            if x>100 then 
            x:=2; 
        end; 
        Fsurface.LoadFromGraphic(TT); 
        DXDraw1.Surface.Draw(0,0,Fsurface.ClientRect,Fsurface,false); 
        DXDraw1.Flip; 
      finally 
        tt.Free; 
        Fsurface.Free; 
        Fsurface:=nil; 
      end; end; //(DXDraw1:640*480*16)  变量X是在CREATE中外部生成的. 程序编译通过,运行时也不报错,但得不到正确的结果! 
    正确的结果本应是“中国”两个字在1.bmp图片上走,但 
    实际的结果却是静止不动! 
    问题:大家从程序中可以看到,我的 副Surface 是动态生成映射到 主Surface 的,然后在动态Free的,为什么 主Surface 中只得到第一次循环(DXTimer)的结果呢?