如何实现背景音乐(100分)

  • 主题发起人 主题发起人 ma-liang
  • 开始时间 开始时间
在Form 上 放一个MediaPlayer1控件.
设置如下属性:
MediaPlayer1.Visible:=false;
MediaPlayer1.filename:='Sound.midi';
Mediaplayer.AutoOpen:=true;
然后在你需要音乐的时候调用:
MediaPlayer1.Play;
即可.

当然文件名称也可以动态指定,不一定在设计期指定.
 
如果要实现音乐的回放,可采取下面的方法:
1.循环
var
stop:boolean;
procedure TForm1.ButtonPlayClick(Sender: TObject);
var time:integer;
begin
time:=MediaPlayer1.Length;
stop:=false;
MediaPlayer1.Play;
while not (stop)do
begin
application.ProcessMessages;
if MediaPlayer1.Position=MediaPlayer1.Length
then
MediaPlayer1.Play;
end;

end;
停止:
procedure tform1.buttonStopclick(sender:tobject);
begin
stop:=true;
MediaPlayer1.Stop;
end;

2.利用Timer控件
Timer1.Enabled:=false;
procedure TForm1.ButtonPlayClick(Sender: TObject);
begin
MediaPlayer1.Play;
Timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if MediaPlayer1.Position=MediaPlayer1.Length
then
MediaPlayer1.Play;
end;

停止:
procedure tform1.buttonStopclick(sender:tobject);
begin
Timer1.enabled:=false;
MediaPlayer1.stop;
end;

 
uses mmsystem;
then
..
see win32.hlp
 
好像循环要用到notify事件吧
 
mediaplayer中不是有autorewind属性吗?
除非你需要连续播放多个wav文件. 单个wav的重复播放不需要notify
 
W.H.:
>>mediaplayer中不是有autorewind属性吗?
该属性只是保证播放结束后,位置回到起始,但不自动重放,你自己试试看.
 
WH(老大?):this time u r not right.
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if ((MediaPlayer1.NotifyValue=nvSuccessful) and
(MediaPlayer1.mode=mpStopped)) then
begin
mediaplayer1.rewind;
mediaplayer1.play;
end;
end;
 
cd好象不能利用autorewind的。不过你可以通过发送mode的方式来取得状态的方法。
做背景音乐不是很难的。你要不要重放啊?还是一首接一首放下去呢?把tmediaplayer给隐藏了。然后你控制它的属性就可以了啊!
 
刚才试了一下mediaplayer的OnNotify事件,确实可实现回放.
不好意思,看了提问后,匆忙看了一下帮助,凭借以前的一点印象,使用了上述
方法,没有仔细研究其各事件和方法.
请使用CJ大侠的方法实现回放.
 
用m$的mediaplayer, 有一个playcount=0就可以自动replay了.
 
不会是问Dos下的背景音乐吧,
 
多人接受答案了。
 
后退
顶部