MediaPlayer的问题,简单吧!都进来.(100分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老兄台,都用过Delphi的SYSTEM页中的MediaPlayer吧?

if FileExists(ExtractFilePath(Application.Exename)+'RunLib/T01.AVI') then

begin

MediaPlayer1.FileName:=(ExtractFilePath(Application.Exename)+'RunLib/T01.AVI');
MediaPlayer1.Open;
MediaPlayer1.Notify:=true;
MediaPlayer1.Display:=Form2;
MediaPlayer1.DisplayRect:=Form2.ClientRect;
MediaPlayer1.Play;
end;


然后如下让它循环
procedure TForm2.MediaPlayer1Notify(Sender: TObject);
begin

if MCIStop=1 then
Exit;
if MediaPlayer1.Mode=mpStopped then

begin

MediaPlayer1.Rewind;
MediaPlayer1.Play;
end;

MediaPlayer1.Notify:=true;
end;



这样没错吧!在NT上是没有问题,可在win98上就不行,这是为什么?如何解决?
 
怎么不行?
 
我试了,没什么问题啊
 
我也认为没什么问题.
可能是你的win98有问题.
你把运行情况讲一下好吗?
 
呵呵,错误是什么?
 
不会吧!我在NT上是没问题,但在98上就不行。

menxin,你的程序和我写的一样吗?你是怎么写的。

jiangyy,程序如上了,只是它就不给我触发Notify事件。

我也知道关健是在Notify的这个事件上,但你不能这样写
procedure TForm2.MediaPlayer1Notify(Sender: TObject);
begin

MediaPlayer1.Play;
end;


这样自然可以了,因为Play的时候它给触发了Notify事件(可stop时就不了)。
因为我还想终止它不能这样作,一定要按上问题中给出的程序写。
判断当前装状,是mpStopped时给于Play过程。可这时它根本不给触发了Notify事件。
你们看我该如何办,不会是我的98出问题了吧?我可在很多机子上试过了。

wjiachun,它给个错误就好了,可它什么都没给出。就是播发玩就停在哪儿,
没有任何事件。
 
怎么不行?是不循环播放吗?在我这里MediaPlayer播放完后会触发Notify事件的。
要不然用一个Timer做循环如何?做媒体播放器可是少不了Timer这东东的。
 
我又试了,确实没有问题,可以循环播放。
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin

if MediaPlayer1.Mode = mpStopped then

begin

// ShowMessage('Stopped');
MediaPlayer1.play;
MediaPlayer1.Notify := True;
end;

end;

 
这不可能吧?我试过很多遍,而且在多台机器上,还让别人也帮试过。
结果就是不循环。
我在回去试试。
 
我试过了,用我上面的程序,嘿嘿!
第一次只放一启遍移停了,第二次以后,只放两遍移不再循环了。
你们的程序如何写的。
 
老兄啊,你是怎么搞的,我又试了十多遍,硬是没有问题,代码就是上面我列的
那一段,它会一直循环下去的。
 
Sachow:
老兄啊!你是在Win98上用的吗?
我是先在NT上编好,在NT上是没问题,一直循环下去。
而在98上运行,它根本不给你循环,对了,我连续让它执行了十来遍,
只有一次触发了Notify事件,可它执行完了第二次循环后就没继续下去。

我用的就是你的程序,而且是在98下。
 
加个Timer就解决了,把Notify里面的处理放到
timer事件里吧。
另外说一句:AVI文件和DAT文件是不一样的,可能分歧出现在这里吧?
 
to Sachow:
你用的是WIN98的哪个版本?我发现在98的第二版中不行,但第一版中可以。
看来又发现了第二版中的一个BUG了。

to lww:
这种方法在NT和WIN98的早期的版本中就可以。
如象你所说的用Timer,我不就得先要算出播入时间?如果因为某种原因,使播放
时间加长哪它就不可能进行下一个循环,因为在播放时给它Play是不起作用的。
 
对了对了,我用的Win98就是第一版的,没有这个问题。
用Timer这样做:
在Timer的Ontimer事件中加入:
if MediaPlayer1.Position <= MediaPlayer1.Length then

begin

MediaPlayer1.Rewind;
MediaPlayer1.Play;
end
else
MediaPlayer.Enabled := False;
 
抱歉,这前几天系统崩溃了,这才恢复下常功作。

此问题的造成,已证实为WIN98的第二版中的BUG造成的,看来解决的
办法现在只为Sachow给出的程序,用定时器来时时解发。

Sachow 50分 给出了正确的程序,
lww 20分 给出了正确的答案,

jiangyy 10分
menxin 10分
wjiachun 10分

如果没人有意见或有更好的办法,下欠我就结束问题了。
 
看来没人有意见,那咱们就发分。

就按上面的发。几位不要嫌少,问题简单吗。

我还有难的问题,有三百分呢。

 
Kang 10分
Wjiachun 0分
OK? :)
 
多人接受答案了。
 
to Kang:

可惜可惜,你来晚一步,我已提交了分数。

你说,你有这么好的见意,为何不早点说呢?

下次一定,一定要早说。

我又有一个问题,是一个十分轻松的话题。

咱就来个。
Kang 10分
Wjiachun 0分
OK? :)

嘿嘿!

<a href="DispQ.asp?LID=267140">嘿嘿!很有意思,来瞧瞧如何?</a>

 
后退
顶部