高手帮我看看,我想在窗体上演示一个移动的正方体,仅通过改变正方体的坐标,但是这个过程只是在窗体上最后坐标处显示一个静止的,why?
procedure TForm1.Button1Click(Sender: TObject);
var
   step, x1,x2,y :integer;
begin
   x1 :=50;
   y :=50;
   x2 :=60;
   step :=1;
   repeat
      x1 :=x2;
      x2 :=x2+step;
      form1.Canvas.Pen.Color :=form1.Color ;
      form1.Canvas.Brush.Color :=form1.Color ;
      form1.Canvas.Rectangle(x1-5,y-5,x1+5,y+5);
      form1.Canvas.Pen.Color :=clwhite;
      form1.Canvas.Brush.Color:=clred;
      form1.Canvas.Rectangle(x2-5,y-5,x2+5,y+5);
      until
         x2=600;
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       step, x1,x2,y :integer;
    begin
       x1 :=50;
       y :=50;
       x2 :=60;
       step :=1;
       repeat
          x1 :=x2;
          x2 :=x2+step;
          form1.Canvas.Pen.Color :=form1.Color ;
          form1.Canvas.Brush.Color :=form1.Color ;
          form1.Canvas.Rectangle(x1-5,y-5,x1+5,y+5);
          form1.Canvas.Pen.Color :=clwhite;
          form1.Canvas.Brush.Color:=clred;
          form1.Canvas.Rectangle(x2-5,y-5,x2+5,y+5);
         sleep(1000);
          until
             x2=600;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       step, x1,x2,y :integer;
    begin
       x1 :=50;
       y :=50;
       x2 :=60;
       step :=1;
       repeat
          x1 :=x2;
          x2 :=x2+step;
          form1.Canvas.Pen.Color :=form1.Color ;
          form1.Canvas.Brush.Color :=form1.Color ;
          form1.Canvas.Rectangle(x1-5,y-5,x1+5,y+5);
          form1.Canvas.Pen.Color :=clwhite;
          form1.Canvas.Brush.Color:=clred;
          form1.Canvas.Rectangle(x2-5,y-5,x2+5,y+5);
          sleep(10);         //延时阿
          application.ProcessMessages;
          until
             x2=600;
    end;
      

  3.   

    代码没错的话,加个sleep延时一下就可以了
      

  4.   

    太慢了,改成这样应该看的很清楚:
    procedure TForm1.Button1Click(Sender: TObject);
    var
       step, x1,x2,y :integer;
    begin
       x1 :=50;
       y :=50;
       x2 :=60;
       step :=1;
       repeat
          x1 :=x2;
          x2 :=x2+step;
          form1.Canvas.Pen.Color :=form1.Color ;
          form1.Canvas.Brush.Color :=form1.Color ;
          form1.Canvas.Rectangle(x1-5,y-5,x1+5,y+5);
          form1.Canvas.Pen.Color :=clwhite;
          form1.Canvas.Brush.Color:=clred;
          form1.Canvas.Rectangle(x2-5,y-5,x2+5,y+5);
         sleep(100);
          application.ProcessMessages;
          until
             x2=600;
    end;
      

  5.   

    如果不加延时的话,速度太快了,反应不过来,就是画出来了,你也看不到的,不信的话试一下这个:
    for i:=0 to 100 do
     begin
       inc(j);
       inc(k);
       form1.color:=reg(i,j,k);
    end;
    看你的窗体的颜色怎么变化?如果写在timer.ontimer中,又如何呢?
      

  6.   

    各位高手提示的没错,就是需要加一个延时sleep,这样肉眼可以看出来,还有timeer控件可以实现这个功能