flash 的几个问题!!!急!帮者有分!!!!(50分)

Delphi与flash的信息通道
一.添加FlashActiveX控件

  要在Delphi中播放flash依赖于FlashActiveX控件,所以我们要先安装它。运行Delphi后,选择选单Component→Import ActiveX Control,找到SWFlash.OCX(或者Shockwaveflash.ocx) 文件进行安装。安装完成后,ActiveX面板里出现TShockwaveFlash控件,这是Delphi对FlashActiveX控件的封装,现在我们就可以用这个控件来播放Flash了。

二.TShockwaveFlash主要属性、方法和事件
  
TShockwaveFlash主要属性如下:
ReadyState:读一个flash文件时的状态;
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为按窗口百分比。
TSetProperty(target:widestring,property_:integer,const value widestring):设定flash中影 片的属性;
TGetProperty(target:widestring,property_:integer):取得flash中影片的属性;
GetVariable(const name:widestring):取得flash中动态文本的值;
SetVariable(const name:widestring,const value:widestring):设定flash中动态文本的值;

TShockwaveFlash主要事件如下:
OnProgress(int percent):读取一个flash时触发;
OnReadyStateChange(int state):状态改变时触发。states的值可以为0=Loading、
1=Uninitialized、2=Loaded、3=Interactive和4=Complete。
OnFSCommand(const command, args: WideString):可用来读取flash按钮中的参数;

三.Delphi与flash的信息通道

1.利用flash控件的Fscommand属性来读取flash按钮中的参数及参数的值。
例: 新建一个flash文件,在flash主场景中添加四个按钮依次在按钮中添加如下脚本:
第一个按钮: on (release) {
fscommand (”Num1”, ”1”);
}
第二个按钮: on (release) {
fscommand (”Num1”, ”2”);
}
第三个按钮: on (release) {
fscommand (”Num2”, ”1”);
}
第四个按钮: on (release) {
fscommand (”Num2”, ”2”);
}
新建一Delphi工程,在Form中添加flash控件,设置好其movie属性,双击FSCommand事
件,添入以下代码:
procedure TForm1.ShockwaveFlash1FSCommand(Sender: TObject;
const command,args:
WideString);
begin

if command=’Num1’ then
showmessage(’Num1’);

if ((command=’Num1’) and (args=’1’)) then
showmessage(’Num1 1’);
if ((command=’Num1’) and (args=’2’)) then
showmessage(’Num1 2’);
if command=’Num2’ then
showmessage(’Num1’);
if ((command=’Num2’) and (args=’1’)) then
showmessage(’Num2 1’);
if ((command=’Num2’) and (args=’2’)) then
showmessage(’Num2 2’);
end;


2.利用flash控件的Setvariable或Getvariable方法来读或写flash动态文本框中的内容。

例: 新建一个flash文件,在flash主场景中添加一动态文本框,将其variavle设为Text1.
新建一Delphi工程,在Form中添加flash控件,设置好其movie属性,再添加二个Button控件,双
击Button1,添入以下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin

shockwaveflash1.SetVariable(’Text’,’信息已经到达!’);
end;

双击Button2,添入以下代码:
procedure TForm1.Button2Click(Sender: TObject);
begin

showmessage(shockwaveflash1.GetVariable(’Text’));
end;



3. 利用flash控件的TSetProperty或TGetProperty方法来读或写flash影片的属性。

例: 新建一个flash文件,在flash主场景中添加一影片(MC),将其name设为MC1.
新建一Delphi工程,在Form中添加flash控件,设置好其movie属性,再添加二个Button控件和timer
控件,button1的caption设为Start;button2的caption设为end;
代码如下:
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
s:string;
begin

s:=shockwaveflash1.TGetProperty(’MC1’,6);
i:=strtoint(s);
i:=i-10;
s:=inttostr(i);
shockwaveflash1.TSetProperty(’MC1’,6,s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

timer1.Interval :=500;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

timer1.Interval :=0;
end;

运行后,可以看到影片的透明度越来越小。shockwaveflash1.TGetProperty(’MC1’,6)语句中的6表示影片的透明度属性,
其他属性如下:
0----------->表示影片x坐标
1----------->表示影片y坐标
2----------->表示影片xscale
3----------->表示影片yscale
6----------->表示影片的透明度
7----------->表示影片可见性
8----------->表示影片的宽度
9----------->表示影片的高度
10---------->表示影片旋转
小第第一次发表,有何意见尽管往我邮箱里扔吧!^_^
如需源码请Email我,我将会把源码(Delphi和flash)发过去。


文章作者:雨天
文章来源:自创
作者邮箱:yunantian@mail.china.com
 
谢谢各位大哥,谁能给我源代码吗??
我也需要这样的FLASH,你们谁能再说清楚吗??
我要做毕业设计!
 
哪位大哥能帮我解决一下啊,我是学生,在做毕业设计啊,
时间不多了,帮帮忙吧!![:(][:(][:(]
高深的我看不懂,但要是有全部源代码的也可以[:(]
 
上面ychiy已经说的很清楚了,足够了
 
to:yanyandt2
他能实现运行后随鼠标的拖动而改变大小吗?
 
to hanliu:
你搜索一下以前的帖子,找一下关于 运行时改变控件大小 的帖子
配合我上面写的控件,完全可以达到你所需要的功能
 
改变控件大小,没有用windows的消息,因为忘了。
主要原理是当鼠标移动到控件的边缘时(如相差10),则可以改变大小。
我简单写的,只判断了左边,效果不是太理想,你看看能不能改好点。

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
procedure Panel1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
procedure Panel1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

var
lbuttondown:boolean;

implementation

{$R *.dfm}

procedure TForm1.Panel1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
var
m_point:TPoint;
c_point:TPoint;
new_width:integer;
begin

GetCursorPos(m_point);//»ñµÃÊó±ê×ø±ê
c_point:=ScreenToClient(m_point);//½«ÆÁÄ»×ø±êת»»Îª¿Í»§ÇøÄÚ×ø±ê
if(c_point.X-panel1.Left<=10) then

panel1.Cursor:=crsizewe //&amp;frac14;&amp;yacute;&amp;Iacute;·&amp;ETH;&amp;Icirc;×&amp;acute;
else

panel1.Cursor:=crdefault;//&amp;AElig;&amp;Otilde;&amp;Iacute;¨&amp;ETH;&amp;Icirc;×&amp;acute;
if(panel1.Cursor=crsizewe)and(lbuttondown) then

begin

new_width:=Panel1.Left+Panel1.Width-c_point.X;
//&amp;iquest;&amp;Oslash;&amp;frac14;&amp;thorn;&amp;ETH;&amp;Acirc;&amp;iquest;í&amp;para;&amp;Egrave;
Panel1.Left:=c_point.X;//&amp;ETH;&amp;Acirc;&amp;micro;&amp;Auml;left
if( new_width<100) then

exit;
Panel1.Width:=new_width;
// Panel1.Repaint;
end;


end;


procedure TForm1.Panel1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin

if(button=mbLeft) then

lbuttondown:=true;
end;


procedure TForm1.Panel1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin

if(button=mbLeft) then

lbuttondown:=false;
end;


end.

 
to:yanyandt2
谢谢大哥!!其他的控件我能激活并改变大小,
可这FLASH我不会,你能帮我想想办法吗??
 
flash组件没有鼠标移动一些消息,你可以使用消息过滤方法得到flash组件的消息,
方法有很多,简单的一点这样就行:
delphi有一个TApplicationEvents组件,可以截获form的所有消息。
你在这个组件的OnMessage里截获flash组件的消息,如
if(msg.message=鼠标移动)and(msg.handle=flash.handle) then

begin

//处理鼠标移动消息
end;

这样就能得到flash组件的消息了,通过这个方法也可以屏蔽掉
flash组件右键弹出的那个菜单。
 
ychiy:请问,编译时提示SetVariable没有声明,是怎么回事啊!
 
多人接受答案了。
 
顶部