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;
由于某种原因,它只重复一次并停止......任何人都可以发现问题吗?我很累了,我已经过了几次,我似乎无法看到一个......
答案 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)
这是一个很好的例子,人们只是忽略警告信息。 我希望编译器应该吐出提示或错误和无警告。警告只是一个从编译器短路的情况,应该在以后的版本中修复。
干杯