我的程序如何得知mediaplayer已经将我指定的AVI或DAT文件播放完了?(100分)

  • 主题发起人 主题发起人 littley
  • 开始时间 开始时间
L

littley

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用的是DELPHI自带的mediaplayer,确切的说,我需要的是一个类似MEDIAPLAYER的
onplayend事件
 
Note: before running this example, initialize the Notify property of TMediaPlayer1 to True.

const

ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');

procedure TForm1.MediaPlayer1Notify(Sender: TObject);

begin

with Sender as TMediaPlayerdo

begin

Form1.Caption := ModeStr[Mode];
{ Note we must reset the Notify property to True }
{ so that we are notified the next time the }
{ mode changes }
Notify := True;
end;

end;
 
用一个Timer控件来读取当前的播放位置,如果到了结束的位置就播放完了
 
播放完了,就SENDMESSAGE一个自定义消息,你就可以利用这个消息
 
我要连续自动播放多个AVI、DAT文件,无须用户控制,MEDIAPLAYER控件不可见,

maming的方法是检测用户点击了MEDIAPLAYER的STOP按钮,因此并不适用我的要求
我现在采用的是类似张无忌的方法,将MEDIAPLAYER的timeformat设置为tfMillionsecond(好象是这样拼
总之是毫秒级),用一个计时器timer,将起interval:=mediapleyer1.length+1000;
timer到时就播放另一个视频文件。但这种方法对视频文件的播放时间控制不够精确,
有时会比实际播放时间长或短十几秒,在视频文件较大时更为明显,请大家帮我想一个更为
专业精确的方法,谢谢!
 
在mediaplayer1的onNotify事件中写:
if (mediaplayer1.mode=mpStopped) and
(mediaplayer1.NotifyValue=nvSuccessful) then

//播放下一文件
 
maming和naughtboy的方法在播放短文件的非常有效,但文件稍长,如DELPHI自带的
speed.avi才一分钟,onnotify事件根本检测不出stop,我每次均设置notify:=true的
 
谢谢,我自己把问题解决了,不过大家的回答启发了我,并纠正了我原先一些错误的认识
如我以前认为onnotify事件是用户单击mediaplayer按钮时发生的,现在我知道它是在一个
mediaplayer方法调用结束时发生的。
我综合了我原先的方法和大家的方法,如下:

在mediaplayer1的onNotify事件中写:
if (mediaplayer1.position=mediaplayer1.length) then

begin

timer1.enable:=true;
…… // 但这里不能使用mediaplayer的控制方法如open、play之类
end


 
多人接受答案了。
 
后退
顶部