TrackBar控制播放出的声音断断续续???(100分)

  • 主题发起人 Gingerzy
  • 开始时间
G

Gingerzy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用一TrackBar控制播放一段wav声音,(如下)可播放出的声音拖动TrackBar时声音断断
续续,谢谢!!!!
procedure TFormMain.TrackBar1Change(Sender: TObject);
begin

MediaPlayer1.Pause;
MediaPlayer1.Position := TrackBar1.Position;
MediaPlayer1.Play;
end;


procedure TFormMain.Timer1Timer(Sender: TObject);
begin

TrackBar1.Min := 0;
TrackBar1.Max := MediaPlayer1.Length;
TrackBar1.Position := MediaPlayer1.Position;
end;
 
我试试
告诉时候告诉你
 
谢谢,等待好消息!!!
 
断续的主要问题是因为你使用了timer控件,每次检测mediaplayer的位置,然后使TRACKBAR
发生变化,请注意,此时就激活了你的TrackBar1Change事件,所以就断断续续了。
 
那该怎么办呀!!!!????

谢谢你的回答!
 
我记得两年前也遇到这样问题,不加change事件吧,无法解决手动调整trackbar,加了吧,
又不连续,也忘记最后是怎么处理的了,回头我去看看我的文档。
 
增加一个控制变量PositionChange
procedure TFormMain.TrackBar_playChange(Sender: TObject);
begin

if (TrackBar_play.Position <> (FormFileList.Mediaplayer1.Position div 1000)) then
PositionChange := True
else
PositionChange := False;
if PositionChange then

with FormFileList.Mediaplayer1do

begin

if Mode in [mpOpen, mpPlaying] then

begin

pause;
Position := TrackBar_play.Position * 1000;
Play;
end
else
if mode in [mpOpen, mpPaused, mpStopped] then

begin

Position := TrackBar_play.Position * 1000;
end;

end;

end;
 
我的方法是在ONMOUSEUP事件发生时,把新的位置给了播放组件.很好用的.呵呵.也很简单.
 
能否具体指点一下呀,谢谢!!!
 
还有一段,很完整,你看看吧,选自《Delphi 7项目开发实践》
procedure TFormMain.Timer_playTimer(Sender: TObject);
begin

with FormFileList.MediaPlayer1do

begin

Edit1.Text := ExtractFileName(FormFileList.MediaPlayer1.FileName);
Application.Title := Edit1.Text+' 优利媒体播放系统V1.1';
if Mode in [mpPlaying] then

begin

Edit1.Visible := True;
if FormFilelist.FileChange then

begin

TrackBar_play.Max := FormFileList.MediaPlayer1.Length div 1000;
TrackBar_play.Position := 0;
Label_totaltime.Caption:='总时间 '+ZeroFill(2,inttostr(TrackBar_play.max div 60))
+':'+ZeroFill(2,inttostr(TrackBar_play.max mod 60))+' ';
FormFileList.FileChange := False;
end;

TrackBar_play.Position := Position div 1000;
Label_playtime.Caption:='播放时间 '+ZeroFill(2,inttostr(TrackBar_play.Position div 60))
+':'+ZeroFill(2,inttostr(TrackBar_play.Position mod 60))+' ';
end;

end;

end;
 
嘿嘿,来晚了!补充:可以判断Abs(Trackbar.Postion-Mediaplayer.Postion)的值,
当大于一定值时再Mediaplay.Postion:=Trackbar.Postion;
 
多人接受答案了。
 
顶部