swf的播放问题(50分)

  • 主题发起人 主题发起人 it_boy69
  • 开始时间 开始时间
I

it_boy69

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI可以加入 SHOCKFLASH 控件从而能播放SWF文件,
但是不同的SWF文件播放的显示区域长宽比是不同的.
如何让这个控件能自适应所调用的swf文件的显示区域大小呢?
 
双击ShockWaveFlash1界面,打开ShockWave Flash Object属性对话框,在比例项选择NoBorder项,点应用、确定钮即可.
 
写错,是在比例选项选择ExtractFit项
 
楼上的方法是不行的!
 
你让SWF文件适应控件大小不就行了。SHOCKWAVEFLASH控件中有三种显示方式:拉伸、无边、全部显示。你可以看看。其实就是上面说的那样。[:D]
 
他说的应该是要控件应文件的长宽比而改变控件长宽比。。。
就好像Flash自带的FlashPlayer一样。。自动改变大小。。。
我觉得要实现就要通过对SWF文件的操作了。。SWF文件头有长宽比信息,
不过水平有限虽然知道地址但是不知道如何转换。。[:(]

-.-||
 
黄金史莱姆:
如果你知道SWF文件头中长宽信息的地址
请告诉我,我有办法
 
SFW文件头格式,以一个实际的SWF文件头为例:
46 57 53 05 B4 66 07 00 70 00 0F A0 00 00 BB 80
00 0C 9F 03
字节 1-3 (46 57 53): SWF文件头标志,FWS表示未压缩,CWS表示压缩的SWF文件,需要从第9个字节起用ZLib解压
字节 4 (05): Flash文件的版本,这里表明它是用Flash5生成的
字节 5-8 (B4 66 07 00):一个Integer表示文件的长度,低在前,高在后,这里是$000766B4 = 485044字节,这里应该等于未压缩的SWF文件实际大小或压缩过的SWF解压后的长度+文件头(8字节)
字节 9 - 。。。: SWF显示区域,(左上角坐标,右下角坐标),用下面的方法计算得到:
第9字节前5位(70 shr 3 = 14),以后的字节以14位进行分割,所需位数为 14*4+5 = 61,需要 8 个字节来表示,那么:
70 00 0F A0 00 00 BB 80
01110 00000000000 00001111 10100000 00000000 0000000 010111011 10000000
01110 00000000000000 01111101000000 00000000000000 01011101110000 000
14 0 8000 0 6000
因为Flash的坐标是TWIP格式的,需要除以20的,所以实际为(0,400,0,300)
接下来的两字节 (00 0C):表示帧速率,前一字节表示小数位,后一字节表示整数位,不过一般极少有小数位的帧率,所以一般我们只计整数就可以了,这里 $0C = 12,即每秒12帧
再接下来的两字节 (9F 03):表示总帧数,WORD类型,$039F=927帧,与ShockwaveFlash.TotalFrames 得到的数值是一样的。
再后面的数据是SWF的实体数据
 
好详细。。谢谢pihome了~
 
macromedia公布了它的sdk,有兴趣可以研究一下
 
pihome:
确实用你的方法能得到height, width , 假设用变量W,H记录
可是我用
Shockwaveflash1.height:=H;
Shockwaveflash1.width:=W;
它的播放区域并不按要求变化
有时用鼠标单击它一下就会变化了
这是为什么?
 
设定了swf控件的大小后,要将焦点交出,再获取焦点,就OK了!
with swf1do

begin

Width := 300;
Height := 200;

btnClose.SetFocus;
SetFocus;
end;

 
后退
顶部