如何用ShockWaveFlash控件在播放Flash时显示进度(100分)

  • 主题发起人 主题发起人 Teny
  • 开始时间 开始时间
T

Teny

Unregistered / Unconfirmed
GUEST, unregistred user!
目的:用ShockWaveFlash控件播放Flash时在TrackBar上显示进度,同时调整TrackBar
的Positoin时Flash画面跟着调整到当前画面,就如同播放VCD一样。
请问如何实现?
 
TShockwaveFlash主要属性如下:

ReadyState:读一个flash文件时的状态,其中包括0=Loading、1=Uninitialized、2=Loaded、3=Interactive和4=Complete;
TotalFrames:总帧数,只有当ReadyState = 4时才能访问该属性;
FrameNum:当前播放的帧;
Playing:播放或暂停一个flash;
Quality:指定当前渲染的质量,包括0=Low, 1=High、2=AutoLow、3=AutoHigh;
ScaleMode:缩放模式,0=ShowAll、1= NoBorder、2 = ExactFit;
AlignMode:对齐模式,Left=+1、Right=+2、Top=+4、Bottom=+8;
BackgroundColor:背景色,-1为默认颜色;
Loop:是否循环;
Movie:指定播放的flash文件路径,可以为一个URL。

TShockwaveFlash主要方法如下:

Play():开始播放动画;
Stop();停止播放动画;
Back();播放前一帧动画;
Forward():播放后一帧动画;
Rewind():播放第一帧动画;
SetZoomRect(int left, int top, int right, int bottom):设置缩放的区域;
Zoom(int percent):按百分比缩放;
Pan(int x, int y, int mode):缩放播放面板,其中模式0为按像数、1为按窗口百分比。

TShockwaveFlash主要事件如下:

OnProgress(int percent):读取一个flash时触发;
OnReadyStateChange(int state):状态改变时触发。states的值可以为0=Loading、1=Uninitialized、2=Loaded、3=Interactive和4=Complete。



////////////////////////////////
在以下两个属性上做:
TotalFrames:总帧数,只有当ReadyState = 4时才能访问该属性;
FrameNum:当前播放的帧;
 
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.hwnd=ShockwaveFlash1.Handle then
if Msg.message=275 then
Caption:=format('%d/%d',[ShockwaveFlash1.FrameNum,ShockwaveFlash1.TotalFrames]);
end;
 
哪如何将画面移到指定的Frame呢?
好象ShockWaveFlash1.CurrentFrame是不能重新指定的
 
如果 ShockWaveFlash1.FrameNum:=TrackBar1.Position 时可以移动到指定画面,
但是这时的声音却不是当前帧的声音,而且有时系统会出现 Access violent...
的出错提示
 
看看ReadyState ,我觉得这里有点问题
 
因为我要达到在Flash播放时在TrackBar1上能显示其进度,同时在改变TrackBar1时
Flash移动到当前画面,
因此我在Timer1中令TrackBar1.Position:=ShockWaveFlash1.FrameNum;
在TrackBar1.OnChange中设ShockWaveFlash1.GotoFrame(TrackBar1.Position)或
ShockWaveFlash1.FrameNum:=TrackBar1.Position
这时我才发现Flash播放不了,而且有时系统会出现 Access violent...的出错提示”
想想也对,这样在TrackBar1上显示进度的同时就是TrackBar1.OnChange的过程,难怪
出错,不知道如何解决?
 
将画面移到指定的Frame:
if ShockwaveFlash1.playing then
ShockwaveFlash1.GotoFrame(要到的桢数);
ShockwaveFlash1.Play;
 
to blackbutterfly:
“要到的帧数”我就要通过TrackBar1的改变来实现,这样还是不行的。
要是TrackBar1有OnMouseDown和OnMouseUp就好了。
 
那也没用,太麻烦,除非你在enter里把它先停了
 
我也遇到了同样的问题,请问各位大侠怎么解决,还有怎么全屏显示·!
 
这个问题我已解决
 
怎么解决的啊,说说看啊,我也碰到同样的问题啊,谢谢啊
 
menxin 兄的方法好用!
 
后退
顶部