当前位置:编程学习 > Delphi >>

DELPHI的realAudio播放器问题

我RealAudio控件制作播放器,用trackbar控件做一个播放进度条,用的代码是
procedure TForm1.SpeedButton10Click(Sender: TObject);

begin
if form1.OpenDialog1.Execute then
begin
form1.RealAudio1.SetSource(form1.OpenDialog1.FileName);
form1.RealAudio1.DoPlay; //打开后自动播放
form1.RealAudio1.SetControls('ImageWindow'); //设置图像窗口显示
form1.RealAudio1.Visible:=True; //显示图像窗口
form1.TrackBar2.Max:=form1.RealAudio1.GetLength;
edit3.Text:='播放:'+ExtractFileName(OpenDialog1.FileName);
Timer1.Enabled:=True;
TrackBar1.Enabled:=True;
//TrackBar2.Enabled:=True;
end;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
var
ib:integer;
i:integer;
begin

ib:=form1.RealAudio1.GetPosition;
trackBar2.Position:=ib;
i:=TrackBar2.Position;
form1.RealAudio1.SetPosition(i);
end;
但是最后运行起来进度条不跟着播放进度走,也不能拉,为什么呢?
错在哪了?
答案:
我来回答楼主提出的问题。
首先说一下,Zgyusz 虽然占了沙发,但是纯属胡说。^o^

另外,楼主你问题表述清楚,但是你给出的代码我仔细看了,有点疑问,譬如说你的代码中添加了Timer,但是从整个程序当中来看,却没有用到。

对于你提出的播放进度的问题,
首先,我的思路是先取 RealAudio 当前播放进度,再同步赋值给 TrackBar 进度条;
其次,取得 TrackBar 进度,再同步赋值给 RealAudio 进度条。

我们就从这个 Timer 下手,来解决困惑你的问题。
第一步,先删掉你的TrackBar1,只留一个TrackBar2。
第二步,给Timer写代码,并且修改其他代码:

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
if form1.OpenDialog1.Execute then
begin
form1.RealAudio1.SetSource(form1.OpenDialog1.FileName);
form1.RealAudio1.DoPlay;
form1.RealAudio1.SetControls('ImageWindow');
form1.RealAudio1.Visible := True;
form1.TrackBar2.Max := form1.RealAudio1.GetLength;
edit3.Text := '播放:' + ExtractFileName(OpenDialog1.FileName);
//这里我删掉了你写三条代码
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
TrackBar2.Max := RealAudio1.GetLength;
TrackBar2.Position := RealAudio1.GetPosition;
//实现进度条同步
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
begin
Timer1.Enabled := False;
RealAudio1.SetPosition(TrackBar2.Position);
Timer1.Enabled := True;
//实现拖动 TrackBar 控制 RealAudio 播放进度。
end;

我的办法比较土执行效率也不高,但是经过测试,完全实现了 RealAudio 和 TrackBar 进度条同步和进度控制的问题。
这真是你做得吗?^_^
改一下前面几行,试试
procedure TForm1.Button1Click(Sender: TObject);
begin
if form1.OpenDialog1.Execute then
form1.RealAudio1.SetSource(form1.OpenDialog1.FileName);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.RealAudio1.DoPlay;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.RealAudio1.DoPlayPause;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
form1.RealAudio1.DoStop;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
form1.RealAudio1.SetFullScreen;
end;
end.

上一个:Delphi中ProgressBar使用方法
下一个:用Delphi怎么实现JPEG格式图像的显示

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,