while (i<=10) and (selectsign=1) do
begin
labelarray[i].Caption:=inttostr(random(600));
if i<>10 then
i:=i+1
else
i:=1;
这个labelarray是个标签数组,selectsign是个标志位,当触发该事件后,该标签数组十个标签的caption显示跳动的随机数,就象抽奖一样,但这时整个程序就进入了死循环,无论什么控件都无法操作,我所写的selectsign就是为了跳出这个循环,但无法点击其他的控件(比如按钮)使selectsign为零,从而跳出这个循环,各位大哥帮帮忙看看怎么解决这个问题阿
begin
labelarray[i].Caption:=inttostr(random(600));
if i<>10 then
i:=i+1
else
i:=1;
这个labelarray是个标签数组,selectsign是个标志位,当触发该事件后,该标签数组十个标签的caption显示跳动的随机数,就象抽奖一样,但这时整个程序就进入了死循环,无论什么控件都无法操作,我所写的selectsign就是为了跳出这个循环,但无法点击其他的控件(比如按钮)使selectsign为零,从而跳出这个循环,各位大哥帮帮忙看看怎么解决这个问题阿
因此你的代码实际相当于
while selectsign=1 do
begin
labelarray[i].Caption:=inttostr(random(600));
if i<>10 then
i:=i+1
else
i:=1;
你这样的问题:
1.刷新太快了,CPU一直被占用
2.只有selectsign<>1时才退出,而此时没有其它代码能够使得selectsign<>1,因此退不了
用定时器是最好的办法,只要定时器一生效后,每隔一定时间(可设置)
i 从1到10,分别 labelarray[i].Caption := inttostr(random(600));
在按钮事件函数中将定时器停下来就实现选定
begin
application.ProcessMessages; //让主程序处理消息,这样主程序就有可能处理控件的事件.
labelarray[i].Caption:=inttostr(random(600));
if i<>10 then i:=i+1
else i:=1;
end;
1、用TIMER控件
2、在循环或线程中加入application.ProcessMessages; 响应其它事件
程序运行时,就会响应你的按键或者鼠标点击,
在响应这些操作的程序代码中,就可以填写
selectsign:=0,等代码,使循环条件为假
楼上各位已经解决你的问题,你的控制可以如下:
var
i:integer;
while (selectsign==1) do
begin
Application.ProcessMessage();
for i:=1 to 10 do
begin
// 赋值
end;
end;结构是不是清晰多了?