播放flash完毕时的触发事件是什么(100分)

  • 主题发起人 主题发起人 Jimever
  • 开始时间 开始时间
J

Jimever

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中用ShockwaveFlash播放flash完毕时的事件是什么?
loop已设为false
用OnReadyStateChange好像不行,state值为4时是complete,是播放完毕的意思吗,好像用不了
 
完成与否看Totolframes是否和currentFrames相等就可以判定。
完毕的概念在FLASH怎么算,有时FLASH是循环的没有完毕的。

procedure TForm1.ShockwaveFlash1Progress(Sender: TObject;
percentDone: Integer);
begin


end;
 
但是ShockwaveFlash1Progress是载入flash时的事件,在哪个事件里判断Totolframes是否和currentFrames相等?要另外做个监控事件,还是用ShockwaveFlash1的哪个事件》?
 
你干脆找个地方判断算了。你最后可以使用TIMER定时器触发查看判断,效率也很好。。。

没有这个事件不能硬来。你可以看里面的TLB根本没有,自己定时器检查算了。
有些事件就是这样的原理。
 
我也有同样的问题,Progress事件我试过,好像不行

不过我刚看完贴子,有一个想法,对我来说是个好的解决办法,因为Flash文件也是我自己做的.
在Flash的最后一帧加一个FSCOMMAND,这样我就知道此时已经播放完成了.
 
用ShockwaveFlash1.IsPlaying判断flash是否结束
再做想做地事件
我也是新手,刚学到地
 
看完了。喝杯咖啡
 
网中戏 你还没 在我的帖子里 回答完问题呢~~能否 解释下 read 和readbuffer 的具体 含义 和他们的参数的作用。

还有楼主的问题我前几天也碰到过。还 没问呢 ~~现在 看到了同样的 问题。哈哈 真高兴~~ 对了 蓝叶菱 说的 TLB是什么东西 ?在哪判断 Totolframes是否和currentFrames的值啊~~~ 迷糊
 
//设置timer为1ms

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls,
ComCtrls;

type
TForm1 = class(TForm)
ShockwaveFlash: TShockwaveFlash;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
pro: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

ShockwaveFlash.Movie := 'D:/cfq/备份/设计资料/swf/新建文件夹 (2)/11.swf';
ShockwaveFlash.Play;
Timer1.Enabled := true;
Label1.Caption := IntToStr(ShockwaveFlash.TotalFrames);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin

pro.Max:= ShockwaveFlash.TotalFrames -1;
pro.Position :=ShockwaveFlash.CurrentFrame;
if pro.Position > StrToIntDef(Label2.Caption, 0) then

Label2.Caption := IntToStr(pro.Position);
if pro.Max= pro.Position then
begin

Timer1.Enabled := false;
ShockwaveFlash.StopPlay;
showmessage('aa');
end;

end;


procedure TForm1.FormCreate(Sender: TObject);
begin

Timer1.Enabled := false;
end;


end.
 
问题: 请问如何得知FLASH动画播放结束? ( 积分: 10 )
分类: 控件 - 使用

来自: delphi_xs, 时间: 2003-06-23 10:47:00, ID: 1973413
我用的是shockwaveflash控件,请问各位,如何得知动画播放结束?我不希望用时钟触发,
耗资源。先多谢了。

来自: lichdr, 时间: 2003-06-23 16:33:00, ID: 1974560
這個控件沒有用過但查了一下發現有OnFscommand這個事件
如果在flash中寫過“退出”的Fscommand的話,應該可以探到動畫的結束

来自: delphi_xs, 时间: 2003-06-23 17:23:00, ID: 1974777
SORRY,我没说清楚,我是指在flash没有发command的情况。
因为有一些动画我没有原文件,不能加command。

来自: laoli, 时间: 2003-06-23 17:33:00, ID: 1974809
可以判断当前帧数和总帧数是否相等或相近

来自: ICEsting, 时间: 2003-06-23 18:04:00, ID: 1974923
我也在关注,我以前也是用的 laoli的方法,离最后一帧还有2帧的时候读下一个,但是判断不是很准确.
寻求方法中.

来自: delphi_xs, 时间: 2003-06-24 9:44:00, ID: 1976050
是啊,如果用时钟,用
if swf.CurrentFrame=swf.TotalFrames then
……来做,判断不准确,假设flash动画
只有一桢的话,有时就判断不出来。

来自: laoli, 时间: 2003-06-24 23:07:00, ID: 1978483
可以用时钟判断,是否当前帧数和总帧数是否相等或相近,并且停止了(停在某一帧)


来自: sars1, 时间: 2003-06-25 9:21:00, ID: 1978938
请问什么是COMMAND?FLASH 什么情况下发COMMAND信息?


来自: ICEsting, 时间: 2003-06-25 10:49:00, ID: 1979259
看来要精确判断是否播放结束是不可能的事了[:(]

来自: delphi_xs, 时间: 2003-06-27 11:07:00, ID: 1984945
to sars1:
flash的Action里面有一个onfscommand事件,可以发送命令和参数(一般你发个命令就够
了),delphi中的shockwaveflash控件也有一个onfscommand事件,可以接收flash传过来
的命令和参数.


来自: delphi_xs, 时间: 2003-06-27 11:09:00, ID: 1984956
to ICEsting
同感,我还没解决好。

来自: ICEsting, 时间: 2003-06-27 11:27:00, ID: 1985019
想来想去,可能laoli的方法好一些.[:)]
"可以用时钟判断,是否当前帧数和总帧数是否相等或相近,并且停止了(停在某一帧)"



来自: sars1, 时间: 2003-07-01 17:50:00, ID: 1994668
TO delphi_xs你好,最好给个例子好吗?我实在不会用啊!先谢谢了!!!!

来自: sars1, 时间: 2003-07-01 17:54:00, ID: 1994679
还有我为什么得不到FLASH的总真数呢:
LABLE1。CAPTION=shockwaveflash.TotalFrames ;

来自: delphi_xs, 时间: 2003-07-02 9:21:00, ID: 1995650
TO sars1:
flash的Action里面有一个onfscommand事件,可以发送命令和参数(一般你发个命令就够
了),现在假设你在FLASH中的一个按钮的ONMOUSEdo
WN事件中加了onfscommand的命令,为
“DOSOMETHING”,那么你在DELPHI中用SHOCKWAVEFLASH控件调用该FLASH文件(*.SWF)时
候,就可以接收它按钮发送的COMMAND,来做你想要做的事情。
比如:你想要在DELPHI中点击该FLASH上的按钮,执行 showmessage('hello');只需在
shockwaveflash控件的onfscommand上做如下操作就行了。
procedure TForm1.swf_1FSCommand(Sender: TObject;
const command,
args: WideString);

begin

if command='dosomething' then

showmessage('hello');

end;


//shockwaveflash控件名为swf_1

来自: yanyandt2, 时间: 2003-07-02 9:24:00, ID: 1995665
没有办法
因为flash如果最后一桢用的是电影夹,你根本无法判断


来自: delphi_xs, 时间: 2003-07-02 9:29:00, ID: 1995696
唉,难道就没有办法了么?我要在每一个动画播放完毕的时候调用下一个。关键是有的用
了电影夹,郁闷。

来自: delphi_xs, 时间: 2003-09-29 10:37:00, ID: 2207377
多人接受答案了。

问题讨论没有结束 ...
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
937
DelphiTeacher的专栏
D
D
回复
0
查看
892
DelphiTeacher的专栏
D
D
回复
0
查看
864
DelphiTeacher的专栏
D
后退
顶部