高分求:用 Tmediaplayer连续播放!!

boatzm 2003-10-19 07:50:03
怎样用Tmediaplayer 实现连续播放!?
就是一个文件播放完了过后,会产生什么事件或消息?!!

急求!大哥们救我!!!
...全文
66 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongdzh 2004-01-16
  • 打赏
  • 举报
回复
zzh54zzh(我也要补钙!) Thank you
Thank you,各位大侠!@#
boom201 2003-10-20
  • 打赏
  • 举报
回复
我有一个办法就是用timer控件来定期的检查,看是否当前的歌曲已经播放完,如果是,则把第二个文件的路径附值给mediaplayer,下面是代码,你看看吧:(属性设置里面需把timer1的enabled设置成false,还有需要设置一个全句变量i,作用看下面就知道了。这个例子里面用的是一个button来载入播放文件,记得opendialog的options属性里面要改成允许多选哦)
procedure TForm1.Button1Click(Sender: TObject);
begin
if opendialog1.Execute then begin
mediaplayer1.close; i:=0;
mediaplayer1.FileName:=opendialog1.Files[i];//第一个播放文件
timer1.Enabled:=true;//使timer开始工作,
mediaplayer1.Open;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);//timer1的ontimer事件
begin
if mediaplayer1.Position=mediaplayer1.Length then //判断是否播放完了当前的文件
begin i:=i+1; //是的话播放地址向后一个
if i<=opendialog1.Files.Count-1 then //判断是否后面还有文件
begin
mediaplayer1.FileName:=opendialog1.Files[i];
mediaplayer1.Open;
mediaplayer1.Play;//播放下一个
end;
end;

end;
boatzm 2003-10-20
  • 打赏
  • 举报
回复
大家有兴趣再帮我看看声音的问题,调大小,不是声道!!

我用了两种方法都不行!:(
http://expert.csdn.net/Expert/topic/2369/2369381.xml?temp=.7803614
boatzm 2003-10-20
  • 打赏
  • 举报
回复
解决了 谢谢大家哈。

结贴老!!!
dickeybird888 2003-10-20
  • 打赏
  • 举报
回复
以下是我帮助你找到的,你实验一下吧!有问题的话给我发消息!
//在执行MediaPlayer1的Pause、Stop过程时应将其Notify:=False,其它过程Notify:=True.
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
sleep(500);//主要其缓冲作用
with MediaPlayer1 do
begin
if notify And Chechbox1.Checked And//接受信息
(mode=mpStopped) then//已经停止
begin
ReWind;
play;
end;
notify:=true;//开始接受信息
end;
end;
zzh54zzh 2003-10-20
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.FileName := 'E:\MyProgram\CDMsg1.1\Client\MusicHint\didi.wav';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Position = MediaPlayer1.Length then
MediaPlayer1.Play;
end;
zzh54zzh 2003-10-20
  • 打赏
  • 举报
回复
if MediaPlayer1.Position = MediaPlayer1.Length then
……
boatzm 2003-10-20
  • 打赏
  • 举报
回复
YYQQ(阿鱼) :
这句就有问题。
if MediaPlayer1.NotifyValue = nvSuccessful then //播完了, 做其它的事

提示:nvSuccessful 是啥子类哦,反正不匹配!
YYQQ 2003-10-20
  • 打赏
  • 举报
回复
//播放结束时触发OnNotify事件, 根据NotifyValue值判断

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.NotifyValue = nvSuccessful then //播完了, 做其它的事
ShowMessage('end');
end;
boatzm 2003-10-19
  • 打赏
  • 举报
回复
顶顶,是太简单了,还是分少了?分不够又给!!!!
一个自制MP3播放器(含原代码)这个程序的关键是BmpShape的应用。unit BmpShape;{2002/08/22 by ultrared根据BMP文件创建窗口注意:1. BMP文件最左上的一个点颜色作为背景色2. BmpShape控件只能用在TForm容器上3. BMP文件可以是256色或者24位色4。大块背景色必须和背景色绝对相等才能获得正常效果}interfaceuses Forms,Windows, Messages, SysUtils, Classes, Controls, ExtCtrls,Graphics;type TBmpShape = class(TImage) private { Private declarations } BackColor:TColor;//背景颜色 FColorDither:boolean;//是否允许背景颜色有一定的抖动 function GetRegion:HRGN;//前景图片的区域 procedure setColorDither(cd:Boolean); protected { Protected declarations } public { Public declarations } constructor Create(AOwner:TComponent);override; procedure Apply;//使用效果 published { Published declarations } property Dither:Boolean read FColorDither write setColorDither; end;procedure Register;implementationprocedure Register;begin RegisterComponents('Samples', [TBmpShape]);end;procedure TBmpShape.setColorDither(cd:Boolean);begin if cd<>FColorDither then FColorDither:=cd;end;constructor TBmpShape.Create(AOwner:TComponent);begin inherited Create(AOwner); BackColor:=RGB(0,0,0); FColorDither:=FALSE;end;//核心子程序,获得BMP图片的前景区域function TBmpShape.GetRegion:HRGN;var i,j:integer; rgn1,rgn2:HRGN; StartY:integer; r,g,b,r1,g1,b1:BYTE; cc:TColor;begin if Picture.Bitmap<>nil then begin BackColor:=Picture.Bitmap.Canvas.Pixels[0,0]; rgn1:=CreateRectRgn(0,0,0,0); for i:=0 to Picture.Bitmap.Width-1 do begin StartY:=-1; for j:=0 to Picture.Bitmap.Height-1 do begin cc:=Picture.Bitmap.Canvas.Pixels[i,j]; if FColorDither then begin //允许和背景有一定的色差 r:=(cc and $FF0000) shr 16; g:=(cc and $FF00) shr 8; b:=cc and $FF; r1:=(BackColor and $FF0000) shr 16; g1:=(BackColor and $FF00) shr 8; b1:=BackColor and $FF; if (abs(r-r1)<10) and (abs(g-g1)<10) and (abs(b-b1)<10) then begin if (StartY>=0) and (j>=StartY) then begin rgn2:=CreateRectRgn(i,StartY,i+1,j); CombineRgn(rgn1,rgn1,rgn2,RGN_OR); StartY:=-1; end; end else begin if Starty<0 then StartY:=j else if j=(Picture.Bitmap.Height-1) then //最下面一个点 begin rgn2:=CreateRectRgn(i,StartY,i+1,j); CombineRgn(rgn1,rgn1,rgn2,RGN_OR); end; end; end else //不允许色差 begin if cc=BackColor then begin if (StartY>=0) and (j>=StartY) then begin rgn2:=CreateRectRgn(i,StartY,i+1,j); CombineRgn(rgn1,rgn1,rgn2,RGN_OR); StartY:=-1; end; end else begin if Starty<0 then StartY:=j else if j=(Picture.Bitmap.Height-1) then //最下面一个点 begin rgn2:=CreateRectRgn(i,StartY,i+1,j); CombineRgn(rgn1,rgn1,rgn2,RGN_OR); end; end; end; end; end; result:=rgn1; end else result:=0;end;procedure TBmpShape.Apply;begin if Parent is TForm then begin Left:=0; Top:=0; Width:=Picture.Bitmap.Width; Height:=Picture.Bitmap.Height; with (Parent as Tform) do begin BorderStyle:=bsNone; Width:=Self.Width; Height:=Self.Height; end; SetWindowRgn(Parent.Handle,GetRegion,FALSE); end;end;end.

5,386

社区成员

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

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