软件报
首页 |  新闻 |  软件 |  网络 |  编程 |  硬件 |  业界 | 
  首页>编程>正文
 
让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文件中;按导入按按钮,就能从文件中把名字读出来。不管你输入的是字母还是汉字,都能正确读写!

文章检索    


编程>热门文章

·VB中串口通讯的实现
·Visual C++技巧问答
·用ASP.NET打造个人留言本
·心铃回音(2003-2)
·心铃回音(2003-1)
·GDI+与GDI屏幕抓图比较
·埃及祖玛游戏编程模拟
·ASP.NET上传文件到数据库
·财经网站股票成交数据批量下载的VB实现
·一步一步开发CHM在线帮助文件系统-1
·在Visual C++中实现一个DLL木马
·在VB中设计丰富的图片转场效果
·ASP.NET 开发实例之博客系统(2)--用户管理
·让FLASH能读会写
·ASP.NET 开发实例之博客系统(一)
·用GTK+2编制Linux平台上的定时提醒备忘录
·用VB.NET制作Office XP风格的工具栏
·一步一步开发CHM在线帮助文件系统-3
·用Java存取SQL2000中的图片
·VC编程处理数据文件的一些体会
·基于互联网的网络校时软件开发
·用VB编写从目标文件中提取图标的程序
·用Delphi实现通用的定时自动关机程序
·VB使用WinSock设计网络五子棋
·Ado.net与T-SQL快速搭建ERP筐架

日期:2008-4-29 15:12:59
 【关闭窗口】 
我要评论
                
评论标题:     (共有0条评论)   

请注意:
· 遵守国家有关法律、法规,尊重网上道德。
· 本网拥有管理用户和评论的一切权利,并有权在网站内转载或引用评论。
软件报


 

加入收藏 | 帮助中心 | 投稿指南 | 广告服务 | 报社简介 | 关于我们

Copyright 2004 By SoftWeek. All Rights Reserved     WebMaster:softsky@sweek.com
版权所有  软件报