不能用TTimer来循环,我想用mciSendString,在网上找了一下也没有很好的答案。请高手指点一下,最好有代码,谢谢。

解决方案 »

  1.   

    方法如下:首先需要在uses部分加入mmsystem,接着写入下列语句,其中d:\onestop.mid 为播放的文件,NN为自定义名称标志,你可以注意到它前面的关键字alias
    procedure TForm1.Button1Click(Sender: Tobject);
    begin
    //播放音乐
    MCISendString('OPEN d:\onestop.mid TYPE SEQUENCER ALIAS NN', '', 0, 0);
    //'OPEN e:\1.MID TYPE SEQUENCER ALIAS NN'  注意 TYPE ALIAS这些关键词
    MCISendString('PLAY NN FROM 0', '', 0, 0);
    MCISendString('CLOSE ANIMATION', '', 0, 0);
    end;procedure TForm1.Button2Click(Sender: Tobject);
    begin
    //停止播放
    MCISendString('OPEN e:\1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
    MCISendString('STOP NN', '', 0, 0);
    MCISendString('CLOSE ANIMATION', '', 0, 0);
    end;
      

  2.   

    拜托,不懂别乱答,PlaySound只播放wav的。
      

  3.   

    这里有个用VB循环播放的
    http://www.vbzx.net/ArticleView/vbzx_Article_View_239.asp
      

  4.   

    to wudi_1982(︻┳═一)
    上面的delphi代码根本不能循环,你试过可以吗?VB的是循环播放全部文件的,不是单个文件,而且有些看不懂,麻烦翻译成delphi代码,谢谢。
      

  5.   

    上面的delphi代码根本不能循环,你试过可以吗?上面的代码只能播放。我没说可以循环。。循环的关键是你判断播放是否结束。给你的那个网址中,有关于这个判断的
      

  6.   

    好心帮你搞东东。还落下一身不是。郁闷。。好人做到底。。
    mciSendString("status " + Pathname + " position", Ret, 1024, 0)可以获得当前播放进度。而当音乐播放完毕时,Ret=0。
    应该知道了吧。。伙计。。
      

  7.   

    mciSendString第二个参数是pchar类型的,怎么会Ret=0,用判断进度的方法岂不是要用TTimer?
    我是想mciSendString有没有一个像PlaySound的SND_LOOP参数那样,能自动循环。唉,问个简单的问题也没人会。
      

  8.   

    播放完成后有mci_Notify_Successful消息
      

  9.   

    看了一下MPlayer.pas的源码,感觉用mciSendCommand会比较好,循环就是楼上说的截获MM_MCINOTIFY消息WParam = MCI_NOTIFY_SUCCESSFUL时,重新播放。代码如下,自己根据需要修改一下:uses MMSystem;private
        { Private declarations }
        procedure MMmciNotify(var Msg:TMessage);message MM_MCINOTIFY;var
       mciOpenParms: TMCI_Open_Parms;
       m_MCIDeviceID: MCIDEVICEID;procedure TForm1.Button1Click(Sender: TObject);  //打开
    begin
      mciOpenParms.lpstrDeviceType := '';
      mciOpenParms.lpstrElementName := 'c:\1.mp3';
      mciSendCommand(
      0 ,
      MCI_OPEN ,
       MCI_OPEN_ELEMENT ,
      DWORD(@mciOpenParms)
      );
      m_MCIDeviceID := mciOpenParms.wDeviceID;
    end;procedure TForm1.Button2Click(Sender: TObject); //播放
    var  mciPlayParms: MCI_PLAY_PARMS;
         ret: integer;
    begin
      mciPlayParms.dwCallback := Form1.Handle;
      mciPlayParms.dwFrom := 0;
      ret := mciSendCommand(
      m_MCIDeviceID ,
      MCI_PLAY ,
      MCI_FROM or MCI_NOTIFY ,
      integer(@mciPlayParms)
      );
    end;procedure TForm1.MMmciNotify(var Msg: TMessage);
    begin
      if Msg.WParam = MCI_NOTIFY_SUCCESSFUL then
         Button2.Click;    //循环
    end;