为什么生成的程序,Edit中的数值会一直不停的变化,而不是向循环中所示从0到100000,显示数字完后继续执行Timer1.Enabled:=False;的代码?如果不加Application.ProcessMessages;的话就没问题,但是Edit无法实时更新数值.procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled :=True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
for I := 0 to 100000 do begin
Edit1.Text :=IntToStr(i);
Application.ProcessMessages;
end;
Timer1.Enabled :=False;
end;
begin
Timer1.Enabled :=True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
for I := 0 to 100000 do begin
Edit1.Text :=IntToStr(i);
Application.ProcessMessages;
end;
Timer1.Enabled :=False;
end;
可能是Interval太小了,循环可能要3秒才计算完,但Interval是1秒
所以循环还没有结束,第2次Timer已经开始了,就这样不停的执行下去咯用一个全局变量就看和出来了,把Interval设置1000,2000,3000,4000...试试
var
j:integer;procedure TForm1.Button1Click(Sender: TObject);
begin
j:=0 ;
Timer1.Enabled :=True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
inc(j);
edit2.Text:=inttostr(j);
for I := 0 to 100000 do begin
Edit1.Text :=IntToStr(i);
Application.ProcessMessages;
end;
Timer1.Enabled :=False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
Timer1.Enabled :=False; //移动到这里试一下
for I := 0 to 100000 do begin
Edit1.Text :=IntToStr(i);
Application.ProcessMessages;
end;
end;