菜鸟问题:关于利用MediaPlayer控件和OpenDialog对话框实现多个文件播放

fengfeiwuwq 2004-03-24 11:41:40
我是一个Delphi初学者,刚刚看了一本关于多媒体播放器的书,上面介绍了怎么样利用MediaPlayer来播放音频和视频文件,我试着照书上的例子编写了一个小程序,但是我想实现播放多个文件的播放,希望各位高手帮忙解决,谢谢。

附上书上的代码和自己添加的一些代码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MPlayer, ExtCtrls, Buttons, ComCtrls, StdCtrls, CheckLst;

type
TForm1 = class(TForm)
Panel1: TPanel;//视频显示区域
MediaPlayer1: TMediaPlayer;//隐藏的媒体播放器
OpenDialog1: TOpenDialog;//打开文件对话框
PlayButton: TSpeedButton;//播放按钮
PauseButton: TSpeedButton;//暂停按钮
StopButton: TSpeedButton;//停止按钮
PrevButton: TSpeedButton;//第一首歌按钮
NextButton: TSpeedButton;//最后一首歌按钮
PrevStepButton: TSpeedButton;//向前跳进
NextStepButton: TSpeedButton;//向后跳进
StepLeftButton: TSpeedButton;//上一首歌按钮
StepRightButton: TSpeedButton;//下一首歌按钮
AddButton: TSpeedButton;//添加按钮
DeleteButton: TSpeedButton;//删除按钮
EjectButton: TSpeedButton;
CloseButton: TSpeedButton;//关闭按钮
StatusBar1: TStatusBar;//窗口状态栏
ListBox1: TListBox;
Timer1: TTimer;
Label1: TLabel;
CheckListBox1: TCheckListBox;
procedure CloseButtonClick(Sender: TObject);
procedure EjectButtonClick(Sender: TObject);
procedure PlayButtonClick(Sender: TObject);
procedure PauseButtonClick(Sender: TObject);
procedure StopButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PrevButtonClick(Sender: TObject);
procedure StepLeftButtonClick(Sender: TObject);
procedure StepRightButtonClick(Sender: TObject);
procedure NextButtonClick(Sender: TObject);
private
{ Private declarations }
PauseStatus:Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
type
TTMSFRec=record
Tracks:byte;
Minutes:byte;
Seconds:byte;
Frame:byte;
end;

var
mpPosition:longInt;
I:integer;

procedure TForm1.CloseButtonClick(Sender: TObject);
begin
close;
end;

procedure TForm1.EjectButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
with MediaPlayer1 do
begin
FileName:=OpenDialog1.FileName;
with OpenDialog1.Files do
for I := 0 to Count - 1 do
begin
ListBox1.Items.Add(Strings[I]);
end;
Open();
DisplayRect:=Rect(0,0,Panel1.Width,Panel1.Height);
Notify:=True;
end;
end;

procedure TForm1.PlayButtonClick(Sender: TObject);
begin
PlayButton.Enabled:=False;
StatusBar1.Panels[2].Text:='播放';
Mediaplayer1.Play;
PauseButton.Enabled:=True;
StopButton.Enabled:=True;
PrevButton.Enabled:=True;
NextButton.Enabled:=True;
PrevStepButton.Enabled:=True;
NextStepButton.Enabled:=True;
StepLeftButton.Enabled:=True;
StepRightButton.Enabled:=True;
end;

procedure TForm1.PauseButtonClick(Sender: TObject);
begin
if PauseStatus then
begin
MediaPlayer1.Resume;
PauseStatus:=False;
StatusBar1.Panels[2].Text:='播放';
end
else
begin
MediaPlayer1.Pause;
PauseStatus:=True;
StatusBar1.Panels[2].Text:='暂停';
end;
PlayButton.Enabled:=True;
StopButton.Enabled:=True;
PrevButton.Enabled:=True;
NextButton.Enabled:=True;
PrevStepButton.Enabled:=True;
NextStepButton.Enabled:=True;
EjectButton.Enabled:=True;
end;

procedure TForm1.StopButtonClick(Sender: TObject);
begin
Form1.StopButton.Enabled:=False;
Form1.PauseButton.Enabled:=False;
MediaPlayer1.Stop;
MediaPlayer1.Rewind;
StatusBar1.Panels[2].Text:='停止';
Form1.PlayButton.Enabled:=True;
Form1.PrevButton.Enabled:=True;
Form1.PrevStepButton.Enabled:=False;
Form1.StepLeftButton.Enabled:=False;
Form1.EjectButton.Enabled:=True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MediaPlayer1.Stop;
MediaPlayer1.Close;
end;

procedure TForm1.PrevButtonClick(Sender: TObject);
begin
MediaPlayer1.Stop;
MediaPlayer1.Rewind;
Form1.PlayButton.Enabled:=False;
PauseStatus:=False;
MediaPlayer1.Play;
Form1.StopButton.Enabled:=True;
Form1.PauseButton.Enabled:=True;
end;

procedure TForm1.StepLeftButtonClick(Sender: TObject);
begin
MediaPlayer1.Previous;
Form1.PlayButton.Enabled:=False;
PauseStatus:=False;
MediaPlayer1.Play;
end;

procedure TForm1.StepRightButtonClick(Sender: TObject);
begin
MediaPlayer1.Next;
Form1.PlayButton.Enabled:=False;
PauseStatus:=False;
MediaPlayer1.Play;
Form1.StopButton.Enabled:=True;
Form1.PauseButton.Enabled:=True;
Form1.PrevButton.Enabled:=True;
Form1.PrevStepButton.Enabled:=True;
Form1.StepLeftButton.Enabled:=True;
end;

procedure TForm1.NextButtonClick(Sender: TObject);
begin
MediaPlayer1.StartPos:=mpPosition;
Form1.PlayButton.Enabled:=False;
PauseStatus:=False;
MediaPlayer1.Play;
Form1.StopButton.Enabled:=True;
Form1.PauseButton.Enabled:=True;
Form1.PrevButton.Enabled:=True;
Form1.PrevStepButton.Enabled:=True;
Form1.StepLeftButton.Enabled:=True;
end;

end.

现在的问题是可以在ListBox里面添加歌曲名字
但是无法实现每首歌的播放
因为每次播放就只能播放所选的第一首歌
还有就是按钮事件我没有编写完
先把这个问题提出来让高手帮我解决一下
谢谢~!!!!
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pandarus 2004-03-24
  • 打赏
  • 举报
回复
up
fengfeiwuwq 2004-03-24
  • 打赏
  • 举报
回复
多谢上面这位朋友的帮忙
但是我在上面的程序里面用了你的程序结果还是一样
倒是我在PlayButtonClick里面用了一段语句以后可以实现播放其他歌曲
但是必须用鼠标点了以后才能播放
不能自动往下一首播放
改动的程序如下:


procedure TForm1.EjectButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
with OpenDialog1.Files do
for I:=0 to Count-1 do
begin
ListBox1.Items.Add(Strings[I]);
end;
end;

procedure TForm1.PlayButtonClick(Sender: TObject);
begin
PlayButton.Enabled:=True;
StatusBar1.Panels[2].Text:='播放';
with MediaPlayer1 do
begin
FileName:=ListBox1.Items[ListBox1.ItemIndex];
Open();
DisplayRect:=Rect(0,0,Panel1.Width,Panel1.Height);
Notify:=True;
end;
Mediaplayer1.Play;
PauseButton.Enabled:=True;
StopButton.Enabled:=True;
PrevButton.Enabled:=True;
NextButton.Enabled:=True;
PrevStepButton.Enabled:=True;
NextStepButton.Enabled:=True;
StepLeftButton.Enabled:=True;
StepRightButton.Enabled:=True;
end;

其他不变
改过以后发现还有StepLeftButton//上一曲 和 StepRightButton//下一曲里面的代码不够实现他们各自的功能,也就是说无法播放下一曲或者上一曲
看看哪位高手能帮我完成这个小程序的所有功能
现在剩下的未完成的程序是:添加和删除按钮,上一曲和下一曲按钮

谢谢!!!!!
cll007 2004-03-24
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
if OpenDialog1.Execute then
for I := 0 to OpenDialog1.Files.Count - 1 do
ListBox1.Items.Add(OpenDialog1.Files.Strings[I]);

if ListBox1.Items.Count>0 then
begin
FCurNo:=0;
MediaPlayer1.FileName:=ListBox1.Items[FCurNo];
MediaPlayer1.Open();
MediaPlayer1.Play;
end;


end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if (MediaPlayer1.NotifyValue = nvSuccessful) and (FCurNo<ListBox1.Items.Count-1) then
begin
inc(FCurNo);
MediaPlayer1.FileName:=ListBox1.Items[FCurNo];
MediaPlayer1.Open();
MediaPlayer1.Play;
end;
end;
menggirl 2004-03-24
  • 打赏
  • 举报
回复
帮UP
fengfeiwuwq 2004-03-24
  • 打赏
  • 举报
回复
怎么没人来帮我啊,真的太简单了吗?

5,388

社区成员

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

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