如何实现程序控制播放Flash文件*.swf第m帧到第m+n帧?(m,n>0)(100分)

  • 主题发起人 主题发起人 hunyuan
  • 开始时间 开始时间
H

hunyuan

Unregistered / Unconfirmed
GUEST, unregistred user!
用D6导入的Shockwave Flash ActiveX,比如想控制播放第5帧到第8帧,如何实现呢?

sf.GotoFrame(3);
while sf.CurrentFrame <8 do
begin
sf.Play;
end;
sf.Stop;
这段,程序死掉了,如何才能正确呢?
到第8帧后,停止播放
 
下面这样行不?
label1:
sf.GotoFrame(3);
sf.play;
while sf.CurrentFrame < 8 do Application.ProcessMessages ;
goto label1
 
我刚试了一下,我上面的代码是可行的,不过,你应该设置一个标志,在GOTO之前先
判断这个标志,例如:if not bExit then goto label1 ,否则,程序不能退出。
 
有没有理想点的实现办法?
 
简单的方法,放一个 Timer 效果不错,资源占用少
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ShockwaveFlash1.CurrentFrame > 30 then
begin
ShockwaveFlash1.GotoFrame(15);
ShockwaveFlash1.Play;
end;
end;
 
加多一个控件会比下面的代码占用资源更少吗?
procedure PlayFlashXtoY;
label
label1:
begin
sf.GotoFrame(3);
sf.play;
while sf.CurrentFrame < 8 do
begin
Application.ProcessMessages ;
if Self.tag=1 then halt;//在CloseQuery事件中置Self.tag=1
end;
goto label1;//如果需要退出播放而不退出,则:is Self.tag=2 then goto label1;
//在某个事件中将Self.tag设为2,变量都不要多用一个
end;
 
while ... Application.ProcessMessages 不仅会占用CPU 资源,
在 Windows 事件驱动结构下,并不是一个好的编程习惯,会带来复杂的重入问题。
 
呵呵,真是不试不知道,一试吓一跳!轻松虎说得对!用Application.ProcessMessages
真不如加一个Timer控件!高手,高手!
 
后退
顶部