问题: delphi7与flash如何传递参数? ( 积分: 10 )
分类: 控件 - 使用
来自: redurchin, 时间: 2004-12-24 10:58:00, ID: 2942881
在delphi7中通过点击按钮来控制flash动画中灯泡的亮与灭,
在flash中定义了参数deng,当deng =1时,灯亮,deng=0时,灯灭。
在delphi7中为deng赋值。
利用的是 ShockwaveFlash
来自: zxhcc2000, 时间: 2004-12-24 11:47:23, ID: 2942991
应该可以通过TShockwaveFlash的SetVariable(const name:widestring,const value:widestring)方法处理,它可以设定flash中动态文本的值,再通过文本值控制灯泡的亮和灭
来自: weiliu, 时间: 2004-12-24 12:14:33, ID: 2943043
flash 的几个问题!!!急!帮者有分!!!! (50分)
分类:多媒体 hanliu (2003-05-14 21:08:00)
我是用的 ShockwaveFlash
我想在程序运行后动态生成的ShockwaveFlash能随鼠标拖动任意改变大小,
还有就是(ShockwaveFlash.dblclick)能有双击事件就好了,希望各位能提出
宝贵的意见,多谢!!!!!
巴格达 (2003-05-14 21:24:00)
看SWF SDK,重载它的双击事件函数
hanliu (2003-05-14 21:28:00)
我是菜鸟啊,不知道怎么办,你能说清楚吗??[?][?]
xp2000 (2003-05-14 22:06:00)
帮你顶
hanliu (2003-05-15 8:31:00)
谢谢,请看到的兄弟帮我顶一下!![
][
]我急啊!
coolqiang (2003-05-15 10:35:00)
回答第一个问题,新建一程序,程序目录下放一“1.swf”,然后放一Button和Flash控件
到窗体上,将swfPlay.Align设为alClient:
procedure TForm1.FormResize(Sender: TObject);
begin
btnExit.SetFocus;
swfPlay.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
swfPlay.Movie := ExtractFilePath(Application.ExeName) + '1.swf';
end;
lmeiing (2003-05-15 10:38:00)
顶
antong (2003-05-15 10:45:00)
up
wangydm (2003-05-15 10:58:00)
我也想知道,幫你up.
lgxyy (2003-05-15 11:03:00)
你可以把ShockwaveFlash先放在一个panel上在改大小时先把焦点移到panel上就可以了我以前做过
hanliu (2003-05-15 15:18:00)
我是想改变FLASH播放窗口的大小,由鼠标控制,FORM窗口不改变,行得通吗??
yanyandt2 (2003-05-15 15:30:00)
flash载入后如果改变大小,最好给flash组件发一个鼠标左键按下的消息,
否则显示会可能出现问题。
双击事件你应该在flash中做,在delphi判断fscommand来处理
hanliu (2003-05-15 15:36:00)
to: yanyandt2
你能在代码上给我指导吗?你讲的我听不太懂,我感到有难度。
yanyandt2 (2003-05-15 15:48:00)
如果使用flash做部分界面,必须要判断一下机器里是否安装了flash的activex
var
TempFlash:TShockWaveFlash;
begin
try
TempFlash:=TShockWaveFlash.Create(application);
except
application.MessageBox('Install Flash ActiveX','',MB_OK);
winexec('./InstallFlash AX.exe',SW_SHOWNORMAL);
application.Terminate;
exit;
end;
//end of try
TempFlash.Free;
end;
//InstallFlash AX.exe 在 flash软件里带
根据flash的fscommand来执行相应的动作:
procedure Tform_main.flashFSCommand(Sender: TObject;
const command,
args: WideString);
begin
if( command='quit') then
close;
end;
//fscommand在制作flash时做好,由做的人自己起名字也可以
载入flash时会出现这样一个问题,如果窗体刚创建时不是最大化,那么在最
大化时flash的显示不会随着变大,尽管已经设置了alclient,但是用鼠标
点一下就可以了(不知道为什么),所以flash由小变大时,要发送一个鼠标
按下的消息,如 sendmessage(flash.handle,wm_lbuttondown,0,0);
yanyandt2 (2003-05-15 15:50:00)
改变大小,可以用splitter来实现。
antong (2003-05-15 16:49:00)
你们都没有了解他要问的。
我知道,看代码,给分吧!
Procedure TForm1.FormResize(Sender:TObject);
//相应窗体的OnResize事件
begin
ActiveControl:=nil;
ActiveControl:=ShockwaveFlash1;
end;
{=============== www.delphicn.com ===================}
你试试吧.绝对可以改变flash控件的大小
hanliu (2003-05-15 17:08:00)
to: antong
大哥,我是要在运行之后改变大小的,并不是在运行前啊!
哪位大哥有好的简单的方法啊!!
爱元元的哥哥 (2003-05-18 11:19:00)
to 巴格达:交流一下,我的QQ:25950596
iloveqq (2003-05-18 11:20:00)
UU p
pihome (2003-05-18 11:41:00)
给你我的控件,要再处理一下不会是什么难事了吧
unit CoolFlash;
interface
uses
SysUtils, Messages, Classes, Controls, OleCtrls, ShockwaveFlashObjects_TLB,
Windows, Menus, Forms;
type
TCoolFlash = class (TShockwaveFlash)
private
FPlayerVersion: string;
FStrecth: Boolean;
function GetStrecth: Boolean;
function GetVersion: string;
procedure RButtonDown(var Msg: TWMRBUTTONDOWN);
message WM_RBUTTONDOWN;
procedure RButtonUp(var Msg: TWMRBUTTONUP);
message WM_RBUTTONUP;
procedure SetStrecth(AValue: Boolean);
procedure WhenKeyDown(var Msg: TWMKEYDOWN);
message WM_KEYDOWN;
procedure WhenKeyUp(var Msg: TWMKEYUP);
message WM_KEYUP;
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd);
message WM_ERASEBKGND;
procedure WMReSize(var Msg: TWMSIZE);
message WM_SIZE;
public
constructor Create(AOwner: TComponent);
override;
procedure ShowAboutBox;
procedure Update;
override;
published
property Strecth: Boolean read GetStrecth write SetStrecth default True;
property Version: string read GetVersion;
property Movie stored True;
property Menu stored True;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('PIHOME', [TCoolFlash]);
end;
{
********************************** TCoolFlash **********************************
}
constructor TCoolFlash.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPlayerVersion:=InttoStr((FlashVersion shr 16) and $00FF);
FPlayerVersion:=FPlayerVersion+'.'+InttoStr(FlashVersion shr 24);
FPlayerVersion:=FPlayerVersion+'.'+InttoStr(FlashVersion and $000000FF);
FPlayerVersion:=FPlayerVersion+'.'+InttoStr((FlashVersion shr 8) and $0000FF);
FStrecth:=True;
end;
function TCoolFlash.GetStrecth: Boolean;
begin
Result:=FStrecth;
end;
function TCoolFlash.GetVersion: string;
begin
Result:=FPlayerVersion;
end;
procedure TCoolFlash.RButtonDown(var Msg: TWMRBUTTONDOWN);
begin
Msg.Result:=1;
end;
procedure TCoolFlash.RButtonUp(var Msg: TWMRBUTTONUP);
begin
Msg.Result:=1;
if Menu and Assigned(PopupMenu) then
with Mouse.CursorPosdo
PopupMenu.Popup(X,Y);
end;
procedure TCoolFlash.SetStrecth(AValue: Boolean);
begin
FStrecth:=AValue;
end;
procedure TCoolFlash.ShowAboutBox;
begin
MessageBox(Application.Handle,PChar('CoolFlash Ver 1.0'#13'程序设计: PIHOME'
+#13#13'基于 MacroMedia Flash ActiveX 控件 '#13'版本: '+Version
+#13'Macromedia Inc.'+#13'http://www.macromedia.com'),'关于...',
mb_OK+MB_ICONINFORMATION+MB_SYSTEMMODAL);
end;
procedure TCoolFlash.Update;
begin
inherited;
if Visible and (not (csDesigning in ComponentState)) then
do
ObjectVerb(-1);
end;
procedure TCoolFlash.WhenKeyDown(var Msg: TWMKEYDOWN);
begin
Msg.Result:=1;
end;
procedure TCoolFlash.WhenKeyUp(var Msg: TWMKEYUP);
begin
if Msg.CharCode<>vk_RButton then
Exit;
Msg.Result:=1;
if Menu and Assigned(PopupMenu) then
with Mouse.CursorPosdo
PopupMenu.Popup(X,Y);
end;
procedure TCoolFlash.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
Msg.Result:=1;
end;
procedure TCoolFlash.WMReSize(var Msg: TWMSIZE);
begin
if Visible and FStrecth and (not (csDesigning in ComponentState)) then
do
ObjectVerb(-1);
end;
end.
ychiy (2003-05-18 21:18:00)
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
chtwj (2003-05-19 8:44:00)
谢谢各位大哥,谁能给我源代码吗??
我也需要这样的FLASH,你们谁能再说清楚吗??
我要做毕业设计!
hanliu (2003-05-19 9:17:00)
哪位大哥能帮我解决一下啊,我是学生,在做毕业设计啊,
时间不多了,帮帮忙吧!![
][
][
]
高深的我看不懂,但要是有全部源代码的也可以[
]
yanyandt2 (2003-05-19 9:23:00)
上面ychiy已经说的很清楚了,足够了
hanliu (2003-05-19 9:53:00)
to:yanyandt2
他能实现运行后随鼠标的拖动而改变大小吗?
pihome (2003-05-19 14:36:00)
to hanliu:
你搜索一下以前的帖子,找一下关于 运行时改变控件大小 的帖子
配合我上面写的控件,完全可以达到你所需要的功能
yanyandt2 (2003-05-19 14:56:00)
改变控件大小,没有用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 //¼ýÍ·ÐÎ×´
else
panel1.Cursor:=crdefault;//ÆÕͨÐÎ×´
if(panel1.Cursor=crsizewe)and(lbuttondown) then
begin
new_width:=Panel1.Left+Panel1.Width-c_point.X;
//¿Ø¼þпí¶È
Panel1.Left:=c_point.X;//еÄ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.
hanliu (2003-05-19 15:35:00)
to:yanyandt2
谢谢大哥!!其他的控件我能激活并改变大小,
可这FLASH我不会,你能帮我想想办法吗??
yanyandt2 (2003-05-19 18:50:00)
flash组件没有鼠标移动一些消息,你可以使用消息过滤方法得到flash组件的消息,
方法有很多,简单的一点这样就行:
delphi有一个TApplicationEvents组件,可以截获form的所有消息。
你在这个组件的OnMessage里截获flash组件的消息,如
if(msg.message=鼠标移动)and(msg.handle=flash.handle) then
begin
//处理鼠标移动消息
end;
这样就能得到flash组件的消息了,通过这个方法也可以屏蔽掉
flash组件右键弹出的那个菜单。
coolqiang (2003-05-22 18:11:00)
ychiy:请问,编译时提示SetVariable没有声明,是怎么回事啊!
hanliu (2003-05-22 21:04:00)
多人接受答案了。
antong-2,chtwj-5,coolqiang-4,iloveqq-2,lgxyy-2,lmeiing-2,pihome-8,wangydm-2,xp2000-2,yanyandt2-12,ychiy-2,爱元元的哥哥-2,巴格达-5,的回答最终被接受。
来自: redurchin, 时间: 2004-12-24 14:14:21, ID: 2943227
谢谢大家了
来自: redurchin, 时间: 2004-12-24 14:19:01, ID: 2943233
接受答案了.
得分大富翁: weiliu