用timer和线程对mediaplayer的判停有什么不同的吗(100分)

  • 主题发起人 主题发起人 cc_cn
  • 开始时间 开始时间
C

cc_cn

Unregistered / Unconfirmed
GUEST, unregistred user!
mediaplayer本身没有事件通知我电影是否结束,所以我先用timer不停判断mediaplayer的mode属性是否等于mpstopped,虽然可以达到此功能,但太耗cpu,特别是timer比较多的时候,所以我后来改用线程来代替timer,就遇到了上述的问题,下面是具体的代码,还请各位大哥指点指点:
procedure timer1.Execute;
begin

while not terminateddo
///当线程没有结束或暂停
begin

if form1.Media1.Mode=mpStopped then
///如果广告结束
showmessage('yes');

end;

end;

断点跟踪时运行到if form1.Media1.Mode=mpStopped then
这句(此时电影已经结束)怎么也不能往下跑了,又回到while not terminateddo
这句
 
补充:
在跟踪时,form1.Media1.Mode的值为(out of bound)35 不知是什么意思
 
建议你用当前时间和总时间来判断。。。当前时间等于总时间的时候 播放就结束了。。。
无论什么播放控件都适用
在将很多播放控件作在一起的播放器效果很好

并且建议和TrackBar作在一起 就是Timer检查当前时间 并在Trackbar中改动位置
在TrackBar.OnChange中判断是否是到达最大值 到达最大值则播放结束

不知道说明白了没有
 
mediaplayer本身没有事件通知我电影是否结束?我很置疑你的说法。
 
to kl78pgy:
难道mediaplayer有事件通知我影片结束吗,比如类似于form1.close一样有个
mediaplayer1.end或close吗?
如果有类似的事件还请帮帮我,谢谢~~~~~

to Genl:
mediaplayer的什么属性是当前时间和总时间呢,是position 还是 trackposition?
不好意思,麻烦你可以直接告诉我,我等着急用~~~~
 
我没试
position是当前吧
length是总时间吧。。
试试看
 

其实 是有的 是 在 notify 事件内

if mo.notifyValue=nvsucceccful then

showmessage()'完毕'
另外还有 nvFailure 属性,判断 失败的信息
 
我刚试了一下,出现了奇怪的问题,当刚开始播放的时候mediaplayer就认为当前时间等于总播放时间
我的代码如下:
//timer1代码
if media.position=media.length then

begin

timer1.enabled:=false;
showmessage('kk');
end;

//button1代码
media.filename:='c:/1.avi';
media.open;
media.play;
timer1.enabled:=true;
我刚点button1就跳出个对话框——内容kk,怎么回事呢?
 
谢谢各位大哥,麻烦在看看我的新问题~~~~
 
仔细看看帮助,很具体
zhbj的方法可以实现
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
674
import
I
后退
顶部