• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

用Delphi播放Flash的问题...

bluesky_521 2002-09-23 09:08:31
如何用Delphi播放Flash,并能判断Flash影片播放完毕?
...全文
401 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bluesky_521 2002-11-07
多谢大家支持,特别感谢crazyz(乘风)和 liang_z(千山一刀之忍者神龟)
回复
小米加步枪 2002-09-26
总针探测不准确的原因是它的“洋葱皮”效果 呵呵
回复
lf43 2002-09-26
up
回复
bluesky_521 2002-09-26
To D_Q(A.Dai)(阿呆):
麻烦你解释一下“洋葱皮”,先谢了。
===================
To crazyz(乘风):
这段程序我试了,非常棒,多谢了。如果有SwfToExe程序,烦劳你再发给小弟。
回复
crazyz 2002-09-25
这有一个Ext2Ext的函数可将.exe文件转为.Swf的文件。

function ExeToSwf(ExeName: string): string;
var
SourceStream, DestinyStream: TFileStream; // 分别处理EXE、SWF文件的文件流
SwfFileSize: Cardinal; // SWF文件的大小
SWfName: string;
begin
if lowerCase(ExtractFileExt(ExeName))<>'.exe' then exit;
Result := '';
// 打开EXE形式的源文件
SourceStream := TFileStream.Create(ExeName,fmOpenRead);// or fmShareExclusive);
try
// 读取文件标志
SourceStream.Seek(- 2 * sizeof(integer), soFromEnd);
SourceStream.ReadBuffer(SwfFileSize, sizeof(integer));
// 判断读到的文件标志是否和FA123456相同
// 借此判断是否是Macromedia官方格式的Flash文件
if SwfFileSize = $FA123456 then
begin
// 读取SWF文件的大小
SourceStream.ReadBuffer(SwfFileSize, sizeof(SwfFileSize));
SourceStream.Seek(- SwfFileSize - 2 * sizeof(integer), soFromEnd);
// 打开目标SWF文件
SwfName := ChangeFileExt(ExeName,'.swf');
DestinyStream := TFileStream.Create(SwfName, fmCreate);
try
// 从EXE文件流中读取数据
DestinyStream.CopyFrom(SourceStream, SwfFileSize);
Result := SwfName;
finally
// OK,释放文件流
DestinyStream.Free;
end;
end
else
ShowMessage('Unknown type of executable flash file!');
finally
// OK,释放文件流
SourceStream.Free;
end;
end;
回复
bluesky_521 2002-09-25
谢谢上面两位的支持,我自己也做了一些尝识。
判断一个Flash影片是否播放完毕,理论上(我想)应该是
MyShochwaveFlash.TotalFrames=MyShockwaveFlash.CurrentFrame时,
但是我发现,影片总是在最后1-3祯时就停止了,所以实际上我是这样判断的:
MyShockwaveFlash.TotalFrames-MyShockwaveFlash.CurrentFrame<=3时。
//______________________________________________________________
我又遇到了一个问题:现在好多Flash影片都作成了.exe文件,
我如何在程序中播放它,又能判断它播放结束了呢?
请高手指点...
回复
liang_z 2002-09-23
delphi里播放flash
在flash大行其道的今天,是否想过在你的程序里也加入几幅flash炫一炫?我们就来试试,前提
是你要装有flash播放软件(你的IE能显示flash),IE之所以能显示flash是安装了一个swflash.ocx
控件,由Macromedia, Inc.提供,我们也用它了,win98在$Windows\System\Macromed\Flash,win2k
在$Winnt\System32\Macromed\Flash下。ActiveX控件在windows里是通用的,delphi当然也支持,打
开你的delphi我们开始了。选择菜单Component --> Import ActiveX Control,选择SWFlash.OCX 文
件,安装,完成后在ActiveX面板里出现TShockwaveFlash控件,这是delphi对SWFlash.OCX的封装,现
在我们就可以用这个控件来播放flash了。拖一个过来放在form上,指定其Movie属性为d:\test.SWF,
按F9,一切OK。delphi编程就是这么轻松、自在。

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 - 背景色,red*65536+green*256+blue,-1为默认颜色。

Loop - 是否循环。

Movie - 指定播放的flash文件路径,可以为一个URL.

方法:
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-按窗口百分比

事件:
OnProgress(int percent) - 读取一个flash时触发。

OnReadyStateChange(int state) - 状态改变时触发。states 可以为 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete。

具体帮助请参见http://www.macromedia.com/support/flash/
此为本人心血来潮之作,不足之处恳请指正,欢迎有兴趣者共同探讨(ypy@yeah.net)。


回复
houwf 2002-09-23
播放用shockwave插件,至于判断小的就不知道了。
回复
发帖
Delphi
创建于2007-08-02

4871

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2002-09-23 09:08
社区公告
暂无公告