flash播放器使用trackbar?(100分)

  • 主题发起人 主题发起人 zhqire
  • 开始时间 开始时间
Z

zhqire

Unregistered / Unconfirmed
GUEST, unregistred user!
你好,我使用dlephi做flash播放器时,我想使flash播放时,播放的进度能在

trackbar显示出进度,我用了timer控件来控制trackbar移动,然后我用了

trackbar的onchange函数,使拉动trackbar时能够移动到指定的frame.但是这样

做的话播放时每隔一秒声音会喳一声.函数如下,请问,我该用什么方法解决,谢


procedure TForm1.Timer1Timer(Sender: TObject);
begin

trackbar1.Position:=shockwaveflash1.CurrentFrame;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
begin

shockwaveflash1.GotoFrame(trackbar1.Position);
shockwaveflash1.Play;
end;
 
试试
var
IsDown: Boolean;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

trackbar1.Position:=shockwaveflash1.FrameNum;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
begin

if IsDown then

begin

shockwaveflash1.FrameNum := trackbar1.Position;
shockwaveflash1.Play;
end;

end;


procedure TMainForm.TrackBar1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin

if Button = mbLeft then

IsDown := True;
//鼠标左键按下
end;


procedure TMainForm.TrackBar1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin

if Button = mbLeft then

IsDown := False;
//鼠标左键弹起
end;
 
不要在TrackBar1Change事件中写。TrackBar移动影响shockwaveflash的CurrentFrame,shockwaveflash的CurrentFrame反过来又影响trackbar的Position。可能会堆栈溢出的。
停顿的原因也在此。都放在Timer事件中

定义全局变量 SkipFrame:Integer 看是手动的还是播放动的

//随TrackBar拖动播放播放
procedure TForm1.Timer1Timer(Sender: TObject);
begin

if SkipFrame=TrackBar1.Position then
//没有拖动还是原来的值,则移动TrackBar1.Position
begin

TrackBar1.Position:=ShockWaveFlash1.CurrentFrame;
SkipFrame:=TrackBar1.Position;
Label1.Caption:='当前第'+IntToStr(ShockWaveFlash1.CurrentFrame)+'帧 共'+IntToStr(ShockWaveFlash1.TotalFrames)+'帧';
end
else
//手动调整TrackBar1.Position
begin

ShockWaveFlash1.GotoFrame(TrackBar1.Position);
SkipFrame:=TrackBar1.Position;
ShockWaveFlash1.Play;
end;

end;

Timer的时间间隔设成500就可以了。如果太小,可能会影响播放。
 
不用看就知道循环触发
 
我也在做这个播放器这样是不行的首先trackbar中没有TrackBar1MouseDown的事件
我现在在找第三方控件带有onclick的。
谁用TrackBar控件做好了发个源程序给我好吗?
ipqqqug@163.com
让我知道一下用TrackBar1是怎么编的
如果你有改过的TrackBar1发给我一个好吗
 
帮你顶一下。
 
jdelphi的办法不错。
 
我做了一个FLASH播放器,没有用滑块控件,自已用图片制了一个滑块。这样即好看又好用。你可以到http://chuanxue.myrice.com/ya/chuanxue.rar下载(下载时要多等一会,我用的免费空间质量不是很好。)下来看看。如果觉得可以把你的邮件发到我的邮件中我给你发一个,要注明,不然我可能当垃圾处理了。email:chuanxue_1999@tom.com
 
我没有用Trackbar,我用的是ScrollBar。一点也不晃。
procedure TForm1.tmr1Timer(Sender: TObject);
begin

if sf1.Playing then

begin

SBartb.Max:=sf1.TotalFrames;
SBartb.Min:=0;
SBartb.Position:=sf1.CurrentFrame;
statsbar.panels[4].Text:='第'+inttostr(sf1.CurrentFrame+1)+'帧';
statsbar.panels[1].Text:='正在播放';
end
else

begin

statsbar.panels[4].Text:='第'+inttostr(SBartb.Position+1)+'帧';
statsbar.panels[1].Text:='等待播放';
end;

end;


procedure TForm1.SBartbScroll(Sender: TObject;
ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin

if sf1.Playing then
//保持原来的播放状态
begin

sf1.GotoFrame(SBartb.Position);
sf1.Play;

end
else

sf1.GotoFrame(SBartb.Position);
end;
 
To:chuanxue
能给我发一个吗?
mymail:delphi21@163.com
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin

trackbar1.Position:=shockwaveflash1.CurrentFrame;//触发了TrackBar1Change
end;


用图片自己画,好看又实用.
 
好久没来看了。发了,请查收。大家可以到此下载
很快
http://www.freewebs.com/chuanxueflash/YA/Chuanxue.rar
这个空间是新申请的,稳定而快。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
740
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部