按开始按钮,循环生成随机数,按停止按钮停止生成。如何实现?

看风景默 2008-04-23 05:04:17


点击“开始”按钮,进入循环生成随机数,点击“停止”按钮,跳出随机数生成循环。
生成的随机数显示在一个Lable上。

我写了以下代码,但是运行的时候,按了“开始”按钮后,程序一个劲的显示随机数,其它按钮都无法响应,连关闭都无法关闭。
请问出现这种情况的原因是什么?要如何实现?先谢了。

procedure TFrmLottery.BtnStartClick(Sender: TObject); //点击开始按钮
begin
Stop:=False;
while not Stop do //循环生成随机数
begin
Randomize;
LblRndNum.Caption:=IntToStr(Random(5030)+1); //生成随机数,显示在label中
sleep(SLEEPTIME); //睡眠下,免得变得太快,在label上看起来很闪
end;
end;

procedure TFrmLottery.BtnStopClick(Sender: TObject); //点击 停止按钮
begin
Stop:=True;
...全文
807 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxuelid 2008-04-29
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
memo1: Tmemo;
begin
memo1:=tmemo.Create(self);
if button1.Caption='start' then
button1.Caption :='stop'
Else if button1.Caption ='stop' then
button1.Caption :='start'
else
button1.Caption :='stop';
Randomize ;
memo1.Text :=inttostr(random(20));
Showmessage(memo1.Text );

end;

blazingfire 2008-04-24
  • 打赏
  • 举报
回复
Stop := False;
Randomize;
while not Stop do //循环生成随机数
begin
Application.ProcessMessages;
if Application.Terminated then
Break;
LblRndNum.Caption := IntToStr(Random(5030) + 1); //生成随机数,显示在label中
sleep(SLEEPTIME); //睡眠下,免得变得太快,在label上看起来很闪
end;
zwjchina 2008-04-24
  • 打赏
  • 举报
回复
procedure TFrmLottery.BtnStartClick(Sender: TObject); //点击开始按钮
begin
Stop:=False;
while not Stop do //循环生成随机数
begin
Randomize;
LblRndNum.Caption:=IntToStr(Random(5030)+1); //生成随机数,显示在label中

sleep(SLEEPTIME); //睡眠下,免得变得太快,在label上看起来很闪
application.ProcessMessages;
end;
end;
Temp_DX 2008-04-24
  • 打赏
  • 举报
回复
去看看多线程吧
阿三 2008-04-23
  • 打赏
  • 举报
回复
在按钮1中加一句:
application.ProcessMessages;
internetroot 2008-04-23
  • 打赏
  • 举报
回复
用线程更好把
Corn1 2008-04-23
  • 打赏
  • 举报
回复
如果不想改成这样,可以在你原来的button1的代码里,sleep后面,加上一句:
Application.ProcessMessages;

因为sleep的时候,主线程阻塞在那里,不处理任何消息,相当于“死掉”一样。
所以,你button2按下去的时候,他不会去处理。
而加上这一句,就是让他去处理消息队列。
Corn1 2008-04-23
  • 打赏
  • 举报
回复
用一个timer好了。
按开始的时候,timer.Enabled := true;
停止,timer.Enabled := false;

在timer的OnTimer事件里:
LblRndNum.Caption:=IntToStr(Random(5030)+1);

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧