Delphi显示Flash动画???(80分)

N

netke

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个Flash播放器,加了一些实用的功能.有一个问题一直没法解决,
我用的是ShockwaveFlash. Align属性已经设为alClient,可是改变窗口大小是却无法刷新
Flash的大小,用过很多办法都没用.用了一个土办法,在窗体resize里一hide一show,画面
闪动厉害.
请问有没有什么办法让其跟MacroMedia的FlashPlayer改变窗口大小能平滑伸缩的.
另:有没有显示Flash的delphi控件,不是ActiveX.哪里有得下载??
 
给你贴一篇文章吧,希望对你有帮助

在Delphi里播放Flash
(姚佩云 2001年09月21日 15:35)

在Flash大行其道的今天,是否想过在你的程序里也加入几幅Flash动画炫一炫呢?OK,心动不如行动,
让我们现在就开始吧!

首先,你的机器里要装有Flash播放软件(你的IE能显示Flash)。IE之所以能显示Flash是安装了由
Macromedia公司提供的swflash.ocx控件,我们可以在Win98的$Windows/System/Macromed /Flash中
或在Win2000中的$Winnt/System32/ Macromed/Flash中找到它。ActiveX控件在Windows里是通用的,
Delphi也同样支持。

运行Delphi后,选择选单Component→Import ActiveX Control,找到SWFlash.OCX 文件进行安装。
安装完成后,ActiveX面板里出现TShockwaveFlash控件,这是Delphi对SWFlash.OCX的封装,现在我
们就可以用这个控件来播放Flash了。拖一个Flash过来,放在Form上,指定其Movie属性为d:/test.SWF,
并按F9键加以运行即可。怎么样,运行效果不错吧?下面,笔者将具体介绍TShockwaveFlash主要属性、
方法和事件,以便于读者开发。

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。

 
tks,不过这些都是普通的资料,对第一个问题没有帮助.
Flash的控件我从ActiveX生成了一个,可以用了.
 
每次改变大小以后
ShockwaveFlash.SetFocus;
搞定!!
 
以前讨论这个问题时,一个高手说是DELPHI的接口少处理了一个,他
改了一下,可以自动适应了,不过他没说怎么改
 
procedure TForm1.FormResize(Sender: TObject);
begin
ShockwaveFlash.Hide;
ShockwaveFlash.show;
ShockwaveFlash.setfocus;
end;
 
算了,来迟了
如果,程序中窗体抖动很厉害的话,试一试form1.DoubleBuffered:=true;
我没有经过检验。
 
form1.DoubleBuffered:=true;
效果还行!!
 
late too

form1.DoubleBuffered:=true;
就是增加缓存 activeX 控件(大的)常有这样的问题
解决办法就是增加缓存
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部