用列表很简单的,一个一个放就行了。 procedure TListForm.Label_addClick(Sender: TObject); var ii:integer; begin ODialog_mul.Title :='打开媒体文件'; // ODialog_mul.InitialDir :=''; ODialog_mul.FilterIndex :=6; if ODialog_mul.Execute then begin if Odialog_mul.Files.Count=0 then exit; for ii:=0 to ODialog_mul.Files.Count-1 do begin listbox.Items.Add(ODialog_mul.Files.strings[ii]); end; end; end;
请参考下面的代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer;type TForm1 = class(TForm) MediaPlayer1: TMediaPlayer; OpenDialog1: TOpenDialog; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure MediaPlayer1Notify(Sender: TObject); private { Private declarations } public FileList : TStrings; CurFileID: Integer; Started : Boolean; { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject); begin FileList := TStringList.Create; CurFileID := -1; end;procedure TForm1.Button1Click(Sender: TObject); var //打开 i : Integer; begin if OpenDialog1.Execute then for i := 0 to OpenDialog1.Files.Count-1 do FileList.Add(OpenDialog1.Files.Strings[i]); end;procedure TForm1.Button2Click(Sender: TObject); begin //播放 if FileList.Count<1 then exit; Started := True; CurFileID := 0; MediaPlayer1.FileName := FileList.Strings[CurFileID]; MediaPlayer1.Open; MediaPlayer1.Play; end;procedure TForm1.MediaPlayer1Notify(Sender: TObject); begin if not Started then exit; if MediaPlayer1.Mode = mpStopped then begin CurFileID:=CurFileID+1; Button2.Click; end; end;end.
我是这样播放的: procedure TForm1.BitBtn1Click(Sender: TObject); var TempItem : TListItem; mp3file :string; begin if ListView1.SelCount <=0 then exit; TempItem := Listview1.Selected; mp3file := TempItem.Subitems.strings[1] + TempItem.Subitems.strings[0]; MediaPlayer1.FileName := mp3file; //MediaPlayer1.Frames:= 1; MediaPlayer1.Open; MediaPlayer1.Play; end;但是我不知道怎样让TempItem := Listview1.Selected; 在listview1中实现指针自动移动到下一行!!!
知道m3u文件吗? 标准播放列表文件。格式: 每行一个文件的全路径。可以用tstringlist.loadfromfile加载进来, 然后按顺序访问tstringlist.strings[i]就可以得到多个文件了! tstringlist.savetofile可以保存播放列表。 /////////// var i:integer sl:tstringlist; begin if opendialog1.execute then begin sl:=tstringlist.create; for i:=0 to opendialog1.filenames.count-1 do begin sl.add(opendialog1.filenames.strings[i]); end; sl.savetofile('xxx.m3u'); sl.free; end; end;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); begin if opendialog1.Execute=true then begin listbox1.items.add(Extractfilename(opendialog1.filename)); self.FilePath.Add(opendialog1.FileName); end; end;procedure TForm1.Button2Click(Sender: TObject); begin mediaplayer1.Close; panel1.Repaint; end; procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer); begin panel1.Color := clwindow; fileext:=extractfileext(listbox1.Items[Listbox1.ItemIndex]); if fileext='.wav' then begin panel1.Caption:='这是一个声音文件!'; mediaplayer1.Close; mediaplayer1.FileName:=listbox1.Items.Text; mediaplayer1.Open; mediaplayer1.Play; end else if fileext='.mid' then begin panel1.Caption := '这是一个mid音乐'; mediaplayer1.Close; mediaplayer1.FileName:=listbox1.Items.Text; mediaplayer1.Open; mediaplayer1.Play; end else if fileext='.mp3' then begin panel1.Caption := '这是一个mp3音乐'; mediaplayer1.Close; mediaplayer1.FileName:=listbox1.Items.Text; mediaplayer1.Open; mediaplayer1.Play; end ;end;procedure TForm1.FormCreate(Sender: TObject); begin listbox1.Clear; self.FilePath:=TSTringlist.Create; self.Repeatflag:=false; end;procedure TForm1.ListBox1DblClick(Sender: TObject); begin self.Repeatflag:=false; Mediaplayer1.Close; mediaplayer1.AutoOpen:=false; mediaplayer1.FileName:=self.FilePath.Strings[listbox1.ItemIndex]; mediaplayer1.AutoOpen:=true; Mediaplayer1.Open; mediaplayer1.Play; end;procedure TForm1.ListBox1Click(Sender: TObject); begin label1.Caption:=self.FilePath.Strings[listbox1.ItemIndex]; end;procedure TForm1.Button3Click(Sender: TObject); begin self.CurrentPlay:=0; self.Repeatflag:=true; Mediaplayer1.Close; mediaplayer1.AutoOpen:=false; mediaplayer1.FileName:=self.FilePath.Strings[0]; mediaplayer1.AutoOpen:=true; Mediaplayer1.Open; mediaplayer1.Play; end;procedure TForm1.MediaPlayer1Notify(Sender: TObject); begin with Sender as TMediaPlayer do begin //Form1.Caption := ModeStr[Mode]; if (ModeStr[Mode]='Stopped') and (self.Repeatflag=true) then begin inc(self.CurrentPlay); Mediaplayer1.Close; mediaplayer1.AutoOpen:=false; mediaplayer1.FileName:=self.FilePath.Strings[CurrentPlay]; mediaplayer1.AutoOpen:=true; Mediaplayer1.Open; mediaplayer1.Play; end; Notify := True; end;end;end.
另为有一种方法是,把选种的文件写如一个文本文件中,这样的好处就不用我多说了吧.
我现在放假,身边没有源码,等到上班之后可以给你发一个。
procedure TListForm.Label_addClick(Sender: TObject);
var
ii:integer;
begin
ODialog_mul.Title :='打开媒体文件';
// ODialog_mul.InitialDir :='';
ODialog_mul.FilterIndex :=6;
if ODialog_mul.Execute then
begin
if Odialog_mul.Files.Count=0 then exit;
for ii:=0 to ODialog_mul.Files.Count-1 do
begin
listbox.Items.Add(ODialog_mul.Files.strings[ii]);
end;
end;
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, MPlayer;type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
private
{ Private declarations }
public
FileList : TStrings;
CurFileID: Integer;
Started : Boolean;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
FileList := TStringList.Create;
CurFileID := -1;
end;procedure TForm1.Button1Click(Sender: TObject);
var //打开
i : Integer;
begin
if OpenDialog1.Execute then
for i := 0 to OpenDialog1.Files.Count-1 do
FileList.Add(OpenDialog1.Files.Strings[i]);
end;procedure TForm1.Button2Click(Sender: TObject);
begin //播放
if FileList.Count<1 then exit;
Started := True;
CurFileID := 0;
MediaPlayer1.FileName := FileList.Strings[CurFileID];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if not Started then exit;
if MediaPlayer1.Mode = mpStopped then
begin
CurFileID:=CurFileID+1;
Button2.Click;
end;
end;end.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
TempItem : TListItem;
mp3file :string;
begin
if ListView1.SelCount <=0 then exit;
TempItem := Listview1.Selected;
mp3file := TempItem.Subitems.strings[1] + TempItem.Subitems.strings[0];
MediaPlayer1.FileName := mp3file;
//MediaPlayer1.Frames:= 1;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;但是我不知道怎样让TempItem := Listview1.Selected;
在listview1中实现指针自动移动到下一行!!!
在文件开始播放时先判断文件的长度,如果一首播放完,则播放下一首!
标准播放列表文件。格式:
每行一个文件的全路径。可以用tstringlist.loadfromfile加载进来,
然后按顺序访问tstringlist.strings[i]就可以得到多个文件了!
tstringlist.savetofile可以保存播放列表。
///////////
var
i:integer
sl:tstringlist;
begin
if opendialog1.execute then
begin
sl:=tstringlist.create;
for i:=0 to opendialog1.filenames.count-1 do
begin
sl.add(opendialog1.filenames.strings[i]);
end;
sl.savetofile('xxx.m3u');
sl.free;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, MPlayer;type
TForm1 = class(TForm)
Panel1: TPanel;
ListBox1: TListBox;
Button1: TButton;
OpenDialog1: TOpenDialog;
Button2: TButton;
Button3: TButton;
MediaPlayer1: TMediaPlayer;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
procedure FormCreate(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
private
{ Private declarations }
Repeatflag:boolean;
FilePath:TStringList;
CurrentPlay:Integer;
public
{ Public declarations }
end;var
Form1: TForm1;
fileext: string;
const ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
if opendialog1.Execute=true then
begin
listbox1.items.add(Extractfilename(opendialog1.filename));
self.FilePath.Add(opendialog1.FileName);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
mediaplayer1.Close;
panel1.Repaint;
end;
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
begin
panel1.Color := clwindow;
fileext:=extractfileext(listbox1.Items[Listbox1.ItemIndex]);
if fileext='.wav' then
begin
panel1.Caption:='这是一个声音文件!';
mediaplayer1.Close;
mediaplayer1.FileName:=listbox1.Items.Text;
mediaplayer1.Open;
mediaplayer1.Play;
end
else
if fileext='.mid' then
begin
panel1.Caption := '这是一个mid音乐';
mediaplayer1.Close;
mediaplayer1.FileName:=listbox1.Items.Text;
mediaplayer1.Open;
mediaplayer1.Play;
end
else
if fileext='.mp3' then
begin
panel1.Caption := '这是一个mp3音乐';
mediaplayer1.Close;
mediaplayer1.FileName:=listbox1.Items.Text;
mediaplayer1.Open;
mediaplayer1.Play;
end ;end;procedure TForm1.FormCreate(Sender: TObject);
begin
listbox1.Clear;
self.FilePath:=TSTringlist.Create;
self.Repeatflag:=false;
end;procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
self.Repeatflag:=false;
Mediaplayer1.Close;
mediaplayer1.AutoOpen:=false;
mediaplayer1.FileName:=self.FilePath.Strings[listbox1.ItemIndex];
mediaplayer1.AutoOpen:=true;
Mediaplayer1.Open;
mediaplayer1.Play;
end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
label1.Caption:=self.FilePath.Strings[listbox1.ItemIndex];
end;procedure TForm1.Button3Click(Sender: TObject);
begin
self.CurrentPlay:=0;
self.Repeatflag:=true;
Mediaplayer1.Close;
mediaplayer1.AutoOpen:=false;
mediaplayer1.FileName:=self.FilePath.Strings[0];
mediaplayer1.AutoOpen:=true;
Mediaplayer1.Open;
mediaplayer1.Play;
end;procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
//Form1.Caption := ModeStr[Mode];
if (ModeStr[Mode]='Stopped') and (self.Repeatflag=true) then
begin
inc(self.CurrentPlay);
Mediaplayer1.Close;
mediaplayer1.AutoOpen:=false;
mediaplayer1.FileName:=self.FilePath.Strings[CurrentPlay];
mediaplayer1.AutoOpen:=true;
Mediaplayer1.Open;
mediaplayer1.Play;
end;
Notify := True; end;end;end.