窗体上有一个timer控件,一个button1按钮,其余控件如下建立,请问如何在Timer1Timer里面写代码实现agv按钮水平移动到
agv.left=newbtn[0].left的地方,停留3秒钟,然后水平移动到agv.left=newbtn[1].left的地方,再停留3秒钟,继续水平移动到
agv.left=newbtn[2].left的地方,停留3秒钟,各位高手帮我看看
var
  Form1: TForm1;
  newbtn :array[0..3] of Tbutton; 
  agv :Tbutton;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
   i :integer;
begin
  for  i :=0 to 2 do
   begin
      newbtn[i] :=Tbutton.Create(Self);
      newbtn[i].Parent :=form1;
      newbtn[i].Left :=30+30*i;
      newbtn[i].Top :=50;
      newbtn[i].Width :=30;
      newbtn[i].Height :=30;
      newbtn[i].Caption :=inttostr(i);
   end;
      agv:=Tbutton.Create(Self);
      agv.Parent :=form1;
      agv.Left :=30;
      agv.Top :=90;
      agv.Width :=30;
      agv.Height :=30;
      agv.Caption :='agv';
   Timer1.Enabled :=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);???????????????

解决方案 »

  1.   

    //参考如下代码~~
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not Assigned(agv) then Exit;
      Timer1.Tag := Timer1.Tag + 1;
      if Timer1.Tag > High(newbtn) then
        Timer1.Tag := Low(newbtn);
      agv.Left := newbtn[Timer1.Tag].Left;
    end;
      

  2.   

    if agv.left=newbtn[2].left then begin
      timer1.enabled := false;
      exit;
    end;
    agv.left := agv.left + 30; ----->或者用下面的判断实现.if agv.left<newbtn[0].left then 
      agv.left := newbtn[0].left
    else if agv.left<newbtn[1].left then
      agv.left := newbtn[1].left
    else if agv.left<newbtn[2].left then
      agv.left := newbtn[2].left
    else
      timer1.enable := false;
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
      newbtn :array[0..3] of Tbutton; //你这里定义多出一个。下面又没有用到。
      agv :Tbutton;
      iP:Integer;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
       i :integer;
    begin
      for  i :=0 to 2 do  //这里只用到3个,上面定义了4个。
       begin
          newbtn[i] :=Tbutton.Create(Self);
          newbtn[i].Parent :=form1;
          newbtn[i].Left :=30+30*i;
          newbtn[i].Top :=50;
          newbtn[i].Width :=30;
          newbtn[i].Height :=30;
          newbtn[i].Caption :=inttostr(i);
       end;
          agv:=Tbutton.Create(Self);
          agv.Parent :=form1;
          agv.Left :=30;
          agv.Top :=90;
          agv.Width :=30;
          agv.Height :=30;
          agv.Caption :='agv';
       Timer1.Enabled :=true;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      iP:=0;
      Timer1.Interval:=3000;
      Timer1.Enabled :=False;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      agv.left:=newbtn[iP].left;  Inc(iP);
      iP:=iP mod 3;   //因为只用到三个,所以3步就循环。
    end;end.
      

  4.   

    if agv.left<newbtn[0].left then 
      agv.left := newbtn[0].left
    else if agv.left<newbtn[1].left then
      agv.left := newbtn[1].left
    else if agv.left<newbtn[2].left then
      agv.left := newbtn[2].left
    else
      timer1.enable := false;
    我也是用这样的判断语句,但是有问题,动态创建的newbtn[i].left可以直接放在if语句里面么?
      

  5.   

    agv.Left := newbtn[Timer1.Tag].Left;
    这句怎么执行不了啊?
      

  6.   

    动态创建的newbtn[i].left可以直接放在if语句里面么?
    可以
    有什么问题?把报错的东西贴出来agv.Left := newbtn[Timer1.Tag].Left;
    这句怎么执行不了啊?
    是什么错误贴出来看
      

  7.   

    我就知道会这样。 我的程序肯定行。 应为我试过了。 
    执行我上面的程序。你还需要做。
    1.在设计期的时候双击窗体。 
    2.在设计期的时候双击Timer控件。