如何显示从1到10000的过程?(20分)

  • 主题发起人 主题发起人 城里的月饼
  • 开始时间 开始时间

城里的月饼

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老大:
用for语句和inttostr()来使label1.caption实现从1到10000的变化,
为何在等待一段时间后只显示了10000,而不显示变化的过程呢??
 
用一个TTimer控件
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := inttostr(i);
i:=i+1;
end;
 
for i:=1 to 1000do
begin
.....
label1.caption := IntToStr(i);
label1.refresh;
.....
end;
 
还要加判断 i 要小于 10000
var
Form1: TForm1;
i:integer;
 
问题是:我不想用Timer控件。而且我用过,也不好使。。。对不起
 
那就用wus001的方法,但是显示速度不能控制
 
var
CT:LongInt;
i:integer;
begin
For i := 0 to 100
begin
label1.caption := IntToStr(i);
CT := GetTickCount div 1000;
While ((GetTickCountCount div 1000) < (CT + 2))do
;
end;
end;

上面的代码应该好使
 
在循环体中加入sleep(n);
n的取值你自己决定吧
for i:=1 to 10000do
begin
.....
label1.caption := IntToStr(i);
label1.refresh;
.....
sleep(1000);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
begin
for i:=1 to 1000do
begin
label1.caption := IntToStr(i);
Application.ProcessMessages;
end;
end;
 
同意 cmtan
简洁明了
 
放一个Ttimer,i定义为全局变量初始化为1;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := inttostr(i);
inc(i);
if i>10000 then
//如果要循环显示,改成
timer1.enabled:=false;
// if i>10000 then
i:=1;
end;
 
跟算法没有关系,程序在完成之后才刷新屏幕,你当然看不到过程,所以一定要在处理过程中不短
地让系统刷新,
用label.refresh或application.processmessage都可以。
 
来晚啦!
 
用一个线程处理。
 
多人接受答案了。
 
后退
顶部