如何自动关闭flash播放器!!???(50分)

  • 主题发起人 主题发起人 fc182
  • 开始时间 开始时间
F

fc182

Unregistered / Unconfirmed
GUEST, unregistred user!
在flash播放完之后,如何自动退出播放器??用地是shockwaveflash
 
FSCommand("quit");
 
FSCommand怎么定义
怎么判断flash播放完了
 
我用ShockwaveFlash1.IsPlaying实现了自动关闭了

不过还是不知道怎么用FSCommand("quit");
来实现,还希望 sllin
指教一下
 
问题: yysun请进...关于delphi与flash的通信问题. ( 积分: 50 )
分类: ActiveX 控件

来自: ICEsting, 时间: 2003-06-21 16:33:00, ID: 1970897
好~.我想问你一个问题,就是关于delphi与flash变量传递的问题,我知道通过command=''可以做,但是我现在想做一个判断flash是否播放完毕,请问有什么消息或者什么条件可以判断它?翻过以前的帖子,收获甚微.

来自: zbsfg, 时间: 2003-06-23 22:46:00, ID: 1975461
路过问一下,有这种接口吗?

来自: 飞扬的花瓣, 时间: 2003-06-23 22:54:00, ID: 1975479
ShockwaveFlash1.IsPlaying=true;

or
if flash1.playing=false then


来自: ICEsting, 时间: 2003-06-24 11:02:00, ID: 1976398
试一下

来自: Pc 狂迷, 时间: 2003-06-24 11:19:00, ID: 1976460
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1111722

来自: ICEsting, 时间: 2003-07-10 14:50:00, ID: 2018070
多人接受答案了。

得分大富翁: Pc 狂迷-20,zbsfg-15,飞扬的花瓣-15,
 
问题: 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);//&raquo;&ntilde;&micro;&Atilde;&Ecirc;ó±ê×&oslash;±ê
c_point:=ScreenToClient(m_point);//&frac12;&laquo;&AElig;&Aacute;&Auml;&raquo;×&oslash;±ê×&ordf;&raquo;&raquo;&Icirc;&ordf;&iquest;&Iacute;&raquo;§&Ccedil;&oslash;&Auml;&Uacute;×&oslash;±ê
if(c_point.X-panel1.Left<=10) then

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

else

panel1.Cursor:=crdefault;//&AElig;&Otilde;&Iacute;¨&ETH;&Icirc;×&acute;

if(panel1.Cursor=crsizewe)and(lbuttondown) then

begin

new_width:=Panel1.Left+Panel1.Width-c_point.X;
//&iquest;&Oslash;&frac14;&thorn;&ETH;&Acirc;&iquest;í&para;&Egrave;

Panel1.Left:=c_point.X;//&ETH;&Acirc;&micro;&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.



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
 
不管怎么说都学到了东西
谢谢两位!!
 
后退
顶部