我设置TMediaplayer的Notify := True;OnNotify := NotifyProc;并在NotifyProc中判断mode,为什么当文件播完却总是playing?

fayeflash 2007-04-05 10:20:25
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Notify := True;
MediaPlayer1.OnNotify := NotifyProc;
end;

procedure TForm1.NotifyProc(Sender: TObject);
begin

Case (Sender As TMediaPlayer).Mode of
mpNotReady:
begin
Memo1.Lines.Add('mpNotReady');
end;
mpStopped:
begin
Memo1.Lines.Add('mpStopped');
end;
mpPlaying:
begin
Memo1.Lines.Add('mpPlaying');
end;
mpRecording:
begin
Memo1.Lines.Add('mpRecording');
end;
mpSeeking:
begin
Memo1.Lines.Add('mpSeeking');
end;
mpPaused:
begin
Memo1.Lines.Add('mpPaused');
end;
mpOpen:
begin
Memo1.Lines.Add('mpOpen');
end;
end;

(Sender As TMediaPlayer).Notify := True;
end;

当文件播完了以后为什么显示mode是playing?
...全文
324 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaabc 2011-02-18
  • 打赏
  • 举报
回复
可以通过 Postion 和 Length 这两个属性来判断的!
SI 2007-04-11
  • 打赏
  • 举报
回复
我觉得应该加一个判断,当其position=length的时候,让其自动的stop应该就可以了。你有没有发现realplay 和windows media player没有开始按钮的,只有开始和暂停共用的,而影音风暴是有的,我想应该是这样实现的。不行,查看源代码,看原因,然后自己写一个事件来完成。也可以利用定时器,真麻烦呀,感觉。
fayeflash 2007-04-10
  • 打赏
  • 举报
回复
用notify来解决判断媒体播放完毕的代码在网上一搜一大堆,我觉得很奇怪。既然行不通为什么还这么有生命力?
正解是什么?难道真的要用定时器解决吗?
SI 2007-04-09
  • 打赏
  • 举报
回复
当TMediaPlayer的一个媒体控件方法(诸如Back、Close、Eject、Next、Open、Pause、PauseOnly、Play、Previouse、Resume、Rewind、StartRecordint、Step或Stop)执行完毕,就会触发OnNotify。我测试其Click事件及Notify,发现其发送的是执行完毕之前的Mode,并且如果是手动进行点击按钮的话,你会发现OnNotify不会按照我们想像的模式进行,有的时候返回的是两个状态,有的时候返回的是一个状态,但是如果按照里面代码的分析,是正确的。而如果将上面的代码添加到OnClick事件中,便会完全呈现发送的是执行完毕之前的Mode。
sdzbbz 2007-04-09
  • 打赏
  • 举报
回复
学习!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧