题主:vb自带函数完全可以达到你的需求,学基础时不要被那些故弄玄虚的所谓高大上吓到了。
(以下完全是为了文字的趣味,提升可读性,无他。如引起楼上版主不适请见谅!)
楼上的为做这么简单的题,先从初学者一头雾水的api、gdi说起,又扯到毫不相干的flash动画,最后居然在控制flash音量上落脚,是不是文不对题了?显摆的有点过了。你就不怕把题主刚刚鼓起的学习勇气给吓没了?
楼上还很原则地以保护用户利益为由,不给源代码。是不是好神秘?好高大上?既展现了他高深莫测的技术,又道出了他的软件市场需求旺盛,高!
为破除神秘,让广大坛友知道技术学习没多大难度,今天我将以完全不知晓如何用vb控制flash、也不懂如何做flash动画的身份来完成楼上类似的用vb控制楼上提供的flash音量的程序,并提供源代码、完整工程。(哎,耽误了我下午的两节实验课,不知道一起做实验的那个帅哥有没有注意到我翘课)
首先下载并解压楼上提供的附件并分析文件组成:楼上提供的共有4个文件,一个fla格式的是flash源文件,不会也没装flash编辑软件,这个文件我可以不理;一个网页文件也不用看;一个有vb图标的“工程1.EXE”文件,应该是示范程序了,没敢运行,怕中毒(这是经验,新手最好记住);剩下最后一个“test1.swf”就是我要试验的对象--楼上做的flash影片了(运行flash也会中毒,管不了那么多了)。
如何从不会到会呢?我当然是祭起我的百度大旗了,一番“vb如何加载flash”“vb如何控制flash音量”“vb如何和flash互动”的关键词搜索并认真阅读相关文章,我知道了vb加载“Shockwave Flash”控件并了解了如何使用该控件的属性播放flash,也知道了两者互动需要使用FSCommand事件和SetVariable方法,FSCommand事件是flash通知vb而SetVariable方法是vb给flash发控制消息的,我只需要控制flash,FSCommand事件可不理。通过百度SetVariable的用法知道有两个字符串参数,一个是flash定义的名称,一个是值;我该怎么知道flash定义的名称呢?难道要我用上那个fla文件吗?还要装flash编辑软件,还要学怎么写flash脚本函数,这太麻烦了,放弃吧!等等,既然是字符串参数,而vb编译的exe文件中字符串常量通常都能显示看到的,于是,打开记事本,拖入楼上提供的“工程1.exe”文件,顿时一大堆乱码。耐心点,慢慢看,不一会,“< i n v o k e n a m e = " s e t V o l "”这段unicode码引起我注意,这不明摆着是设置音量的意思吗?flash定义的名称应该就叫“setVol”,于是SetVariable "setVol","0"、SetVariable "setVol","100"的一通乱试,然并卵!再仔细分析那段unicode码,发现它并不是SetVariable的参数格式,而是一段xml代码,难道还有别的方法给flash发消息?通过遍历“Shockwave Flash”控件方法,CallFunction引起我注意,前面百度时好像看到过这个词,于是将整段unicode码还原为正常文本“<invoke name="setVol" returntype="xml"><arguments><number>0</number></arguments></invoke>”(number之间的0就是音量为0),用CallFunction方法一发送,顿时清净了,成功了,似乎很神秘的技术也不过如此啊!
只要你智商够、有耐性、兴趣足,一切存在的技术都不叫事!下面发源代码及工程文件(加载flash控件后无法存储工程,我只好用动态控件的形式加载,原理一样)。
程序代码:
Dim flash As Object
Private Sub Command1_Click()
flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>0</number></arguments></invoke>"
End Sub
Private Sub Command2_Click()
flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>50</number></arguments></invoke>"
End Sub
Private Sub Command3_Click()
flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>500</number></arguments></invoke>"
End Sub
Private Sub Form_Load()
Set flash = Me.Controls.Add("ShockwaveFlash.ShockwaveFlash", "aaa") '动态加载flash控件
flash.Width = Me.ScaleWidth
flash.Height = Me.ScaleHeight - 900
flash.Visible = True '设定控件大小并显示控件
flash.object.LoadMovie 0, App.Path & "\test1.swf" '加载flash影片
End Sub