加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash 与 vb 也能交互啦!

发布时间:2020-12-15 06:10:52 所属栏目:百科 来源:网络整理
导读:? 其实这是一个很容易解决的问题,可惜这个问题属于两不管的境遇,VB的书没有,FLASH的书也没有,对于不懂FLASH的VB写手就是个问题。 一、将FLASH插入VB窗体 在VB工程/部件的列表里找到shockwaveflash, 添加即可在工具栏里找到 FLASH 控件 ,添加之。。。 该

?

其实这是一个很容易解决的问题,可惜这个问题属于两不管的境遇,VB的书没有,FLASH的书也没有,对于不懂FLASH的VB写手就是个问题。

一、将FLASH插入VB窗体

在VB工程/部件的列表里找到shockwaveflash,添加即可在工具栏里找到FLASH控件

,添加之。。。

该控件有两个值得注意的属性,movie和playing,movie指代FLASH文件,扩展名.SWF,强烈建议采用相对路径给其赋值,例如:

Dim strpath AsString

strpath = App.Path

If Right(strpath,1)<> "" Then

strpath = strpath& ""

End If

shockflash.Movie =strpath & "ping.swf"

而playing为是否自动播放,默认为false,记得改成true哦!

现在你可以用FLASH做为你的闪屏啦!

二、实现交互

首先,打开FLASH,要将做好的FLASH按纽选定,在onrelease事件里编写代码如下:

{

fscommand("string");

}

这里的string为任意字符串,传递给VB的就是这个字符串。让我们启动VB,在shockwaveflash控件就会多出fscommand事件,FLASH里的字符串已经赋给了参数command,假如我们有多个按钮做为工具栏,那么我们就可以通过判定command来编写相应的代码。以下是我的实例:

Private Subflashmain_FSCommand(ByVal command As String,ByVal args As String)

Select Case command

Case"cmdshop"

Frmkaitai.ShowvbModal

Case"cmdvip"

frmMbEmit.ShowvbModal

Case"cmdhome"

FrmJiezhang.ShowvbModal

Case"cmdbill"

Frmtuitai.ShowvbModal

Case"cmdjiankong"

FrmXiaofei.ShowvbModal

Case"cmdhelp"

frmAbout.ShowvbModal

Case"cmdexit"

End

End Select

End Sub

三、应用

VB界面的恶心是天人共愤的,利用FLASH就可以很好的弥补这一点。FLASH美化界面的能力使得FLASH与各种编程工具间的交互变为FLASH推广的契机。

(一) 在VB中播放Flash动画

?

怎样才能在VB中加入Flash动画呢?我们只要使用Flash5自带的ShockwaveFlash.ocx这个控件就可以了。方法如下:

?

1. 打开VB6.0,新建一个工程,在工具箱上单击右键,选择Components…,在部件窗口的控件列表中选择Shockwave flash,然后确定,Flash控件就被加到工具箱上。

2.选择工具箱上的Flash控件,放到窗体上并调整好大小;

3.在Form_Load()过程中加入如下代码:

?

?

Private SubForm_Load()

?

ShockwaveFlash1.Movie= “D:test.swf”

?

'这里写上你的Flash文件目录

?

ShockwaveFlash1.Menu= False

?

ShockwaveFlash1.Playing= True

?

End Sub

?

其中,ShockwaveFlash1.Movie是用来指定你要播放的Flash动画的目录;ShockwaveFlash1.Menu是用来指定是否在Flash动画播放中封闭右键菜单,True为能够显示菜单,False为封闭右键菜单;ShockwaveFlash1.Playing= True是让动画播放。

?

?

好了,按F5看看吧,是不是程序中的Flash动画能播放了?:)

?

?

(二) Flash中控制VB程序实现交互

?

?

现在Flash动画已经能在VB程序中播放了,那么怎么实现在Flash中控制VB的程序从而实现交互式的操作呢?本文的重点也在于此。

?

首先我们先来了解Flash中控制VB程序的基本原理:在Flash的ActionScript里面有个叫做FSCommand()的函数,它的主要功能就是发送FScommand命令,例如使动画全屏播放,隐藏动画菜单,更重要的就是可以与外部文件和程序进行通信。而在VB程序中,我们就是利用的Shockwaveflash控件的FSCommand()过程来完成这一通信过程,实现信息发送的功能,并且根据发送出来的不同的命令及参数来实现对VB程序的控制。

?

明白了吧?简单的说,我们就是利用Flash中的FSCommand()函数向VB发送命令,利用ShockwaveFlash控件来接受这个命令,从而达到Flash控制VB程序的目的。

?

好了,现在知道了原理,我们就一步一步来实现吧!

?

1. 首先要打开Flash5制作一个交互按钮,并在按钮上面加上如下代码:

?

on (release) {

?

fscommand("Send Action");

?

//发送SendAction这个命令

?}

?

这个命令的作用是当按下按钮后Flash向VB发送出名为”SendAction”的命令。当然,这个命令的名字在实际应用中可以叫做其他的任何名字。

?

2. Flash导出成为swf文件,如文章第一部分所述插入到VB6.0中,下面就是VB怎么接受这个命令的事情了;

?

3.在窗体上双击Shockwave Flash控件,进入代码编辑窗口,加入如下语句

?

其中,ShockwaveFlash1_FSCommand这个过程是专门用来接收Flash发送的FSCommand命令的,其中第一个参数command就是与Flash发送过来的命令相对应的,当其一致的时候,则执行后面的程序(本例中是弹出MsgBox)。好了,看看程序运行的结果吧:

?

Private SubShockwaveFlash1_FSCommand(ByVal command As String,ByVal args As String)

?

If command ="Send Action" Then

?

msg =MsgBox("FlashVB成功结合了!",vbApplicationModal,"成功了!")

?

'当接到SendAction命令的时候

?

'这里加入你需要的程序

?

End If

?

End Sub

?

AS中的FSCommand方法

为了能够与非FLASH环境的外部应用程式通讯,AS里提供了一种方法,FSCommand(命令符,参数).

这个方法有两个参数,第一个参数是你打算执行的命令符,第二个参数是你打算传递给执行命令符时所需的参数,如果有需要参数的话.

这一方法能在FLASH中随处被调用,在一个按钮上,在播放FLASH的时候,或者其它你想要呼叫外部代码的任何地方.以下的示范我们讲这一方法置放于一个按钮事件上.

Flash.ocx(SWFlash.ocx)ActiveX控件.

为了能够在VB中播放flash影片,你需要加载一个控件到VB工程中去.

点击"Project",然后点击"Components".(汉化版VB标签为:工程->部件,打开控件选择面板的热键为CTRL+T)然后找到"ShockwaveFlash",并选中.这一文件名连接着名为Flash.ocx(SWFlash.ocx)的控件.

这一控件在你安装MacromediaFlash MX 或者 Flash播放器的时候便自动安装在你的系统当中了.它是一个全特征型的,可由使用微软COM/ActiveX技术的VB程式控件界面的ActiveX控件.此控件能够播放FLASH影片,FLASH影片与VB程序交互的核心部分.

在VB程序中播放FLASH影片

有一个基本原则你必须清楚,那就是:能在VB中通过FLASH控件播放FLASH影片.这里的".swf"格式的Flash影片是正常的,由flash本身生成的一般的flash影片.相同的内容,却能在你的VB程序里再生.

FSCommand事件

这个FLASH插件中有几个方法和事件,这些你都可以通过VB对象查看器找到.而这其中又数FSCommand事件最为重要.正如你可能想到的,这个和AS中的FSCommand方法有相互联系.当你在AS中调用FSCommand方法,FLASH影片又是在VB中的FLASH插件中播放的时候,在VB程式中就会产生一个FSCommand事件了.如果你为VB中的FSCommand事件编写一定代码的话,这些代码将会被执行.

Set/GetVariable方法

这两个方法是用来做VB向FLASH影片回馈工作的.

?

1.激发FSCommand方法的按钮

2.在VB中拦截FSCommand事件.

3.调用setVariable方法,设置FLASH影片中的变量值

4.FLASH中的动态文本框获得新值.

创建例子的FLASH文件

打开FLASH程序.创建一个新文件,添加一个动态文本框和一个按钮入场景中.文本框实例名为:sampleField,文本变量名为:sampleFieldVar,按钮实例名可不用设,按钮上加上AS代码:

on(press) {

fscommand(“setvalue”,“Sample Value”);

}

现在保存这个FLASH文件到指定目录,然后再生成影片.这样一个简单的FALSH影片便在那个保存FLASH文件的目录下生成好了.这便是我们准备加到VB程序中要用到的FLASH影片.

编写VB-FLASH交互

插入一个FLASH插件到VB表单中,为之命名为swfFlashScreen.现在使用下面的方法加载刚刚的FLASH影片到这个组件.

CallswfFlashScreen.LoadMovie(0,filename)

你也可以在插件的属性面板中直接指定加载文件的地址.

第一个参数表示加载影片的级别,这里设成0,表示根目录级别.

当插件中的FLASH影片中激发了FSCommand事件量,插件便会自动拦截FSCommand事件.根据参数决定VB要做的相关操作即可.现在我们能够从FLASH中传递命令和参数到VB中了.然后返回又应该做什么呢,也就是说,如何把信息反馈到FLASH影片中呢.我将会向你描述我是如何把值从VB传递到FLASH中的.

在先前的FLASH文件中,我们已经设定了一个实例名为sampleField的文本框,并将其文本变量设为 sampleFieldVar.为了能改变这个文本框中的值.我们使用下面的方法:

CallswfFlashScreen.SetVariable("sampleFieldVar",value)

第一个参数表示文本框变量的变量名,第二个值表示要赋予的值.当你按下FLASH中的按钮之后,文本框会立即更新.

VB中的代码:

Private SubswfFlashScreen_FSCommand(ByVal command As String,ByVal args As String)

If command ="setvalue" Then

CallswfFlashScreen.SetVariable("sampleFieldVar",value)

end if

end sub

?

从VB发布通知到FLASH

从FLASH中呼叫VB中的方法可以通过FSCommand这一"接口"轻松实现.而反过来,由VB向FLASH发布呼叫通知却没有直接的方法.

假设FLASH通过FSCommand呼叫VB做一些操作,当VB把这些操作执行完毕的时候,要向FLASH反馈一个消息告知操作完成.但是VB却不能直接呼叫FLASH中的方法,但是我们可以使用数据传递机制,(即setVariable)来模拟呼叫方法.

我们通过FLASH等待某一特定变量值来实现上述呼叫过程.在FLASH中设定一个循环监听器,监听从VB传来的被改变的特定变量的值.VB将先前的操作完成后,执行setVariables方法将FLASH中正被监听着的变量赋以新值.这时.正在监听的FLASH判定该变量值是否改变.如果改变,即说明,VB已经执行完它的操作.换句话讲.也可以在这里设里消息筛选.根据该变量的不同的值,呼叫FLASH中不同的方法,从而间接地实现VB呼叫FLASH中方法的目的.

举一个例子说明.放一个动态文本框在主场景.设其默认值为undefined.这时,我们呼叫VB,让其做我们想要的操作,当操作完毕时,VB将文本框里的值改变,即,将文本变量值改变.而在FLASH这边,已经设定好的定时器正以某种频率监听着该文本变量的值是否改变.如果改变,说明VB执行完毕.清除定时器.再呼叫FLASH相关的方法,当然,如果有必要的话.

例子:

//创建一个变量名为VBCalling的动态文本框

// 这个方法用于呼叫VB,将同时开始执行keepWaitingForResponse方法.监听变量值是否经由VB改变.

functionCallVBFunction() {

fscommand(“Test”,“Test”); // 呼叫VB中的方法

keepWaitingForResponse();// 呼叫FLASH中的方法

}

//该函数在VB未收到数据改变的命令是不会向前执行,将一直处于监听状态

functionkeepWaitingForResponse() {

intervalID =setInterval(

function () { //该函数每过100毫秒执行一次,直到定时器被清除

if (VBCalling !=undefined) {

VariableReturned(VBCalling);

}

},100);

}

//该函数只在监听发现变量值被VB改变的时候被执行.

functionVariableReturned(value) {

clearInterval(intervalID);// 清除定时器,结束监听

//你可以在这里放上其它FLASH中的方法,如果有必要的话

}

KAN:

可以说,FLASH正是利用了FSCommand这一"接口"来实现与VB程序的交互.既能让FLASH调用VB中的方法,也能让VB轻松控制FLASH影片的播放.

更多FLASH插件方法,请在VB工程中按F2,再找到shockwaveFlash插件.你会发现有好多关于桢控制的方法,以及一些关于加载的方法.

用VB做自己的可以拖动播放的FLASH播放器,也就变得容易了.

更重要的是,结合VB的强大功能,更可以轻松实现本地指定路径的文件存储.联网交互功能等等.听起来都是蛮不错的哦.

我只翻译了源文档中的与VB-FLASH交互比较关键的部分内容.其它内容,如果各位有兴趣,可以自己琢磨琢磨.

需要Flash4/5的支持,安装OCX控件

?

1)在Flash里的Action中,对按钮的OnRelease()事件设置FSCommand命令

?

在FScommand的对话框里有两栏:Command和Argument,这里面所填的内容将被传到调用的函数里作为参数。一般说来:Command栏填的是你想调用的函数名;Argument栏则填上函数使用的参数。

如:Command栏填“call_alert”;Argument栏填“Helloworld”

?

VB 中:

SubFlash1_DOFSCommand(Command,Argument)

中,可以检查两个参数,让后在Showanother windows

?

VB中有这个专门控件的

?

用VB播放Flash动画

?

Flash是一种矢量格式的动画文件,可以包含动画、声音、超文本链接,而文件的体积却很小。特别适合在网页中使用。

?

其实我们还可以用VB来实现同样的效果:

?

打开VB5后新建一个工程,在工具箱上单击右键,选择部件,在部件窗口中选择ShockwaveFlash,然后“确定”,Flash控件就加载到工具箱中。

?

双击Flash控件使它加载到我们的窗体中,调整一下大小,在属性框中设置movie属性为Flash的动画路径,如:C:vbwja.swf,设置scalemodel属性为2quality属性为1。具体的属性设置可按下表自己设定。

?

属性??? 值?? 含义

?

Scale model

0

全部显示

?

1

随控件大小变化

?

2

缩放至控件大小

?

Quality

0

低分辨率

?

1

高分辨率

?

2

自动降低分辨率

?

3

自动升高分辨率

?

Loop

True

循环播放

?

False

不循环播放

?

Playing

Ture

播放

?

False

停止

?

Movie

要播放的动画路径

?

MenU

Ture

显示快捷菜单(运行时,在动画上点右键)

?

False

不显示快捷菜单

?

?

双击窗体,在form_load()中加入:

?

shockwaveflash1.playing=ture

?

好了现在就可以运行了。(注意:编译后的可执行文件不包含动画文件)如果动画里加上动态按钮,配合鼠标位置判断,就可以作成动态工具条或动态菜单了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读