如何让mediaplayer实现多个文件连续播放,我用的timer时间控制,但是当播放完一个后如果转入第二个中间会有打哏的现象

解决方案 »

  1.   

    刚好做过,我是这样实现的:
    mediaplayer1.close;
    mediaplayer1.filename('文件1');
    mediaplayer1.open;
    mediaplayer1.play;
    sleep(mediaplayer1.length);mediaplayer1.close;
    mediaplayer1.filename('文件2');
    mediaplayer1.open;
    mediaplayer1.play;
    sleep(mediaplayer1.length);
      

  2.   

    在窗体上添加一个ListBox、Timer、OpenDialog、MediaPlay、PopupMenu
    将Timer1的Enable属性设为False
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, StdCtrls, MPlayer, ExtCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        MP: TMediaPlayer;
        ListBox1: TListBox;
        PopupMenu1: TPopupMenu;
        OpenDialog1: TOpenDialog;
        N1: TMenuItem;
        N2: TMenuItem;
        procedure N2Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure N1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure ListBox1DblClick(Sender: TObject);
      private
        opened: Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.N2Click(Sender: TObject);
    begin
      MP.Close;
      Timer1.Enabled:=False;
      Close;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      MP.Close;
      Timer1.Enabled:=False;
      Close;
    end;procedure TForm1.N1Click(Sender: TObject);
    var
      i:integer;
    begin
    opendialog1.Options:=[ofHideReadOnly,ofEnableSizing,ofallowmultiselect];
    if OpenDialog1.Execute then
    begin
    for i:=0 to opendialog1.Files.Count-1 do
    begin
    listbox1.items.add(OpenDialog1.Files.Strings[i]);
    listbox1.Selected[i]:=true;
    end;
    end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var a,b,c,up:integer;
    begin
      mp.TimeFormat := tfHMS;
      {小时数、分钟数和秒数被压缩到一个四字节整数中。
      从最低有效字节到最高有效字节,这四个数分别是:
      小时数(最低有效字节) 
      分钟数
      秒数
      }
      a:=MP.Length;
      b:=mp.Position;
      c:=a-b;
      if c=0 then
      begin
         up:=listbox1.ItemIndex;
         up:=up+1;
         if up<listbox1.Count then
         begin
            mp.Filename :=listbox1.Items[up];
            listbox1.Selected[up]:=true;
            mp.Open;
            mp.Play;
            opened:=true;
         end else
         begin
            mp.Filename :=listbox1.Items[0];
            listbox1.Selected[0]:=true;
            mp.Open;
            mp.Play;
            opened:=true;
         end;
      end;
    end;procedure TForm1.ListBox1DblClick(Sender: TObject);
    begin
    if listbox1.ItemIndex>-1 then
    begin
    mp.Filename :=listbox1.Items[listbox1.Itemindex];
    mp.Open;
    mp.Play;
    opened:=true;
    timer1.Enabled:=true;
    end;
    end;end.
      

  3.   

    a:=MP.Length;   //获取每首歌的长度
    b:=mp.Position; //当前播放的进度
    c:=a-b;