首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让TWindowsMediaPlayer在旧曲目播放完毕后播放新曲目?

如何让TWindowsMediaPlayer在旧曲目播放完毕后播放新曲目?
EN

Stack Overflow用户
提问于 2013-05-17 07:32:30
回答 2查看 2.5K关注 0票数 5

我正在使用TWindowsMediaPlayer,遇到了一个问题。当前歌曲完成后,我无法让它加载新歌曲,然后再播放它。

代码语言:javascript
复制
procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject;
          NewState: Integer);
  begin
    if (NewState = wmppsMediaEnded) then
      begin
        WMPlayer1.URL := FileScanner.SelectSong;
        writeln('Play triggered on ', String(WMPlayer1.URL));
        WMPlayer1.controls.Play;  // DOES NOT PLAY THE SONG!
      end;
  end;

这会加载歌曲,但需要额外的用户干预才能实际播放它。我让它继续的唯一方法是检查wmppsStopped,但是这个事件发生了两次,所以我得到了列表中的每一首奇数编号的歌曲。

有没有关于如何让它正确工作的想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-19 07:27:31

我得到了一个似乎有效的答案。由于TWindowsMediaPlayer似乎是异步操作的,所以不能在不允许其他方法执行的情况下使用方法触发事件。为此,我的猜测是,它拒绝播放方法,因为媒体没有正确加载。

代码语言:javascript
复制
procedure TMainWinForm.WMPlayer1OpenStateChange(Sender: TObject;
  NewState: Integer);
begin
  if NewState = wmposMediaOpen then
    begin
      WMPlayer1.controls.play;
    end;
end;

procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject;
  NewState: Integer);
begin
  if (NewState = wmppsStopped) and (SpecialPlayListMode) then
    begin
      WMPlayer1.URL := FileScanner.SelectSong;
    end;
end;

虽然这不能解释为什么我可以在播放其他内容时更改URL,并毫不费力地播放它……

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 22:58:03

为什么不使用WMPlayer1.Mediacollection

否则,在给出新的url之前,你有没有测试过WMPlayer1.settings.autoStart := True;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16599148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档