怎样在一个循环中,等待另一件事做完再继续循环?? (50分)

  • 主题发起人 wangxian11
  • 开始时间
W

wangxian11

Unregistered / Unconfirmed
GUEST, unregistred user!
这个另一件事就是:等待滚动的字幕完成第一次滚动.
我的方法是:读取字幕当前的纵坐标,
如果小于0,则循环继续.
但是结果却没有达到效果,请各位指点指点,多谢!
 
while 完成do
begin
你的字幕处理
......
end;

 
你就是把另外一个循环包含在这个循环中间
比如
循环一
begin
循环二
begin

end;


end;


IS ok?
 
我也这么做的,可是好象不行
 
是这样的,我现在做的程序是:从一个txt文件中从第一行开始读,如果是".txt"文件
就滚动字幕,滚动一遍结束后在读第二行,如果是avi格式的话就播放avi,在继续...
 
现在在字幕显示这里出了问题
 
for ...
begin
.......
repeat
j:=oxMarquee1.CurrentPosY;//Venus控件中的oxMarquee可以实现字模滚动,
currentPosY是当前文本的纵坐标的位置
until
j<0;
end
 
出了问题?具体说是什么问题?
 
就是字幕没有出来就做下面的事了
 
单步调试或者在代码里面加入showmessage(inttostr(j));
看看j是怎么变化的再说。
或者加入调试窗口
 
显示是0,字幕在移动,等我按确定后就做显示图片了
 
确定是一次还是两次?
 
不好意思,刚才在运行的是这段代码:
While j>0do
j:=oxMarquee1.CurrentPosY;
showmessage(inttostr(j));
 
估计你弄错了,你想,如果j为0的话,这段代码就不会执行,那么
你又怎么可以按确定呢?
 
oxMarquee1.CurrentPosY是一个变化的值,但从程序执行来看,
程序不等字幕上移结束就做下面的事了
 
那我在Formcreat事件里给j赋个oxMarquee1.height,结果也不行
 
而且会死在那里,应该是进入了一个死循环了
 
showmessage(inttostr(j));
While j>0do
j:=oxMarquee1.CurrentPosY;
出现273,按确定后就死掉了,这样循环有问题
 
用多线程
 
今天我想了一下,在执行循环的时候,Form不再进行刷新,
所以oxMarquee1.CurrentPosY的值不变
看来一定要使用多线程,不过我还没学过多线程,现在要找点书看看了
 

Similar threads

S
回复
0
查看
962
SUNSTONE的Delphi笔记
S
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
D
回复
0
查看
920
DelphiTeacher的专栏
D
顶部