| 让FLASH能读会写 |
| 福建 童跃 |
|
《软件报》2008年18期 邮发代号:61-74
我们经常希望Flash能在播放时,把用户输入的一些信息保存在磁盘中,等下一次打开Flash时能从磁盘文件中把上次输入的信息读取出来,这就是Flash的读写功能。
问题与对策
Flash使用的是ActionScript语言,无法完成写文件的操作,必须使用FScommand()命令来调用其他的程序来完成。可是,为了安全性考虑,从Flash 6开始,对FScommand()命令的使用方法做了一些限制:1.必须在播放器文件中才能正常使用;2.被调用的程序必须在Fscommand子文件夹中;3.调用程序时不能传递参数。这样一来,要让Flash实现写文件就变难了。
在Flash中,有一个System.setClipboard()命令,它可以把一个字符串传入系统剪贴板中,(可惜的是没有从剪贴板中取回字符串的命令),这就为我们实现Flash写文件带来了方便。在下面的实例中,我就是在Flash中,把用户输入的信息用System.setClipboard()命令传到系统剪贴板中,然后用FScommand()命令调用一个自己编写的小程序writeTxtFile.exe来完成写文件的操作。writeTxtFile.exe是用VB6写的,运行时自动从系统剪贴板中取出Flash传入的字符串,并写入文本文件中。
Unicode编码的实现
用上面的方法完成了文本文件的创建,可是让Flash用loadVariables()命令读取这个文本文件的内容时,文本中的汉字却出现了乱码。这是怎么回事?原来Flash在处理字符串时使用的是Unicode编码,而VB在把字符串写入文本文件时使用的是ANSI编码。这两种编码处理字符串的方法是不同的:ANSI编码把字母形的字符当作1个字节、把汉字字符当作2个字节来处理;而Unicode编码它把所有的字符都当作2个字节来处理,难怪在Flash中会出现乱码。
怎样才能让VB按Unicode编码来写文本文件?因为Unicode编码把所有的字符当作2个字节来处理,也就是用一个Integer类型的数值来表示(其范围为 -32,768 到 32,767 之间),我们可以把要保存的字符串拆解成一个个的单字符,然后用AscW()函数获得它的Unicode码值,再一个一个地写入文本文件。
还有一点需要注意的是,用Unicode编码的文本文件必须以255 254这两个字节为开头,作为前导标志,或者说是Unicode编码的标志。
实例制作:
问题都解决了,赶快动手做一个吧。
1. 创建文件夹。
在磁盘中建立一个myflash文件夹,在这个文件夹中建立一个Fscommand子文件夹。
2. Flash制作。
打开Flash程序(我用的是Flash Mx 2004版本)。在场景中拖出一个输入文本框,变量名为:nameval,用于让用户输入名字;拖出一个动态文本框,变量名为:txtval,用于显示文本文件中已保存的用户名。导入两个按钮,一个用于把用户输入的用户名保存到文本文件中,一个用于从文本文件中导入用户名。
编写保存按钮动作:
on(release){
//把输入文本框中输入的用户名送入系统剪贴板中
System.setClipboard("txtval=" + nameval);
FScommand("exec", "writeTxtFile.exe");
}
编写导入按钮动作:
on(release){
loadVariables("Fscommand\\user.txt",""); //从子文件夹中的文本文件导入
}
生成播放器文件。把Flash保存在myflash文件夹中,按Flash菜单“文件——发布设置”,在打开的发布设置面板中,去掉默认的Flash和HTML前的选择,改选windows放映文件前打钩,然后按“文件——发布”就会在同文件夹中生成一个同名的Flash播放器文件(exe)。
3. VB制作。
打开VB6.0程序,编写窗体代码:
Private Sub Form_Load()
Me.Hide ’运行时隐藏窗体
On Error GoTo OpenErr ’发生错误后,程序结束
’把从flash传入剪贴板的数据储存在一个名为nr的变量里.
Dim nr As String
If App.PrevInstance Then End ’为防止运行时出现混乱,所以只允许运行一个实例
nr = Clipboard.GetText
Clipboard.Clear ’清空剪贴板
’把nr的内容转化为Unicode编码并存入nrint数组中
Dim nrl, i As Integer
Dim nrint() As Integer
nrl = Len(nr)
ReDim nrint(nrl - 1)
For i = 0 To nrl - 1
nrint(i) = AscW(Mid(nr, i + 1, 1))
Next
Open App.Path & "\user.txt" For Binary As #1
’输入Unicode编码标志
Dim by(1) As Byte
by(0) = 255: by(1) = 254
Put #1, , by
Put #1, , nrint
Close #1
End
OpenErr:
End
End Sub
在Fscommand子文件夹中生成writeTxtFile.exe
4.效果测试。运行myflash文件夹中的Flash播放器文件,在输入文本框中输入名字,按保存按钮,就会把名字保存在Fscommand\user.txt文件中;按导入按按钮,就能从文件中把名字读出来。不管你输入的是字母还是汉字,都能正确读写!
|
|
文章检索
编程>热门文章
|