Delphi Timer问题

Bry*_*yan 1 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;
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它只重复一次并停止......任何人都可以发现问题吗?我很累,香港专业教育学院经历了几次,我似乎无法看到一个......

jac*_*ate 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;
Run Code Online (Sandbox Code Playgroud)


And*_*and 10

这条线

i :=+ 1;
Run Code Online (Sandbox Code Playgroud)

将值+1(也称为1)赋给名为的变量i.(也就是说,如果i等于55,和你做i :=+ 1,那么i将等于1).

也许你在寻找

i := i + 1;
Run Code Online (Sandbox Code Playgroud)

要么

inc(i);
Run Code Online (Sandbox Code Playgroud)


Ser*_*yuz 5

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