Delphi Timer问题

时间:2011-01-26 20:13:53

标签: delphi

procedure TForm1.Timer1Timer(Sender: TObject);
var
   i : integer;
begin
  if i > StrToInt(Edit1.Text) then
    Timer1.Enabled := False
  else
    i :=+ 1;
  SendClick(645,302);
  Sleep(2200);
  SendClick(694,619);
  Sleep(2200);
  SendClick(967,638);
  Sleep(2200);
  SendKeys('{BKSP}{BKSP}{BKSP}{BKSP}1',False);
  SendClick(917,688);
  Sleep(2200);
  SendClick(917,688);
  Sleep(2200);
  SendClick(917,688);
  amount := StrToInt(Label3.Caption) + 1;
  Label3.Caption := IntToStr(amount);
end;

由于某种原因,它只重复一次并停止......任何人都可以发现问题吗?我很累了,我已经过了几次,我似乎无法看到一个......

4 个答案:

答案 0 :(得分:11)

我是一个未初始化的局部变量(它包含垃圾),所以比较的结果如果i> StrToInt(Edit1.Text)是随机的。

您可能希望将一个成员变量添加到表单的类中,在适当的时间初始化并在onTimer事件上检查它的值,如:

type
  TForm1 = class(TForm)
    ..
  private
    FTimerCount: Integer;
    FMaxTimerCount: Integer;
    ..


procedure TForm1.Button1Click(Sender: TObject);
begin
  FTimerCount := 0;
  FMaxTimerCount := 20;  //the timer will fire 20 times.
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(FTimerCount);
  Timer1.Enabled := FTimerCount < FMaxTimerCount;
  DoOtherStuff();
end;

答案 1 :(得分:10)

该行

i :=+ 1;

将值+1(也称为1)分配给名为i的变量。 (也就是说,如果i等于55,而您i :=+ 1,那么i将等于1。)

也许你正在寻找

i := i + 1;

inc(i);

答案 2 :(得分:5)

您没有初始化i,它是一个局部变量。因此,可以启用或不启用定时器,具体取决于它的内存位置保持的任意值。

答案 3 :(得分:0)

这是一个很好的例子,人们只是忽略警告信息。 我希望编译器应该吐出提示或错误和无警告。警告只是一个从编译器短路的情况,应该在以后的版本中修复。

干杯