关于Timer1与Botton1不能同步进行? ( 积分: 50 )

  • 主题发起人 主题发起人 optn3
  • 开始时间 开始时间
O

optn3

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
randomize;
for i := 1 to 500do
begin
Edit1.Text:=floattostr(random(10));
Sleep(10);
Edit1.Update;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Label1.Caption := datetimetostr(now);
end;

当我执行botton1时,label1不能同时显现时间.
请问,Timer1是不是要作为一线程还是做其它修改,望大师贴代码?
 
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
randomize;
for i := 1 to 500do
begin
Edit1.Text:=floattostr(random(10));
Sleep(10);
Edit1.Update;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Label1.Caption := datetimetostr(now);
end;

当我执行botton1时,label1不能同时显现时间.
请问,Timer1是不是要作为一线程还是做其它修改,望大师贴代码?
 
WM_TIMER的级别较低,因此在你的循环执行的时候,WM_TIMER根本就得不到响应.
虽然Edit1.Update也会产生消息,但是这个消息是应用程序内部的,会被直接调度,
for i := 1 to 500do
begin
Edit1.Text:=floattostr(random(10));
Sleep(10);
Edit1.Update;
Application.ProcessMessage();//尝试一下,如果还不OK,那么没办法OK
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
//randomize;
for i := 1 to 500do
begin
Timer1Timer(sender);
Edit1.Text:=floattostr(random(10));
Sleep(10);
Edit1.Update;
self.Repaint;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Label1.Caption := datetimetostr(now);
end;
 
后退
顶部