zzr525 发表于 2010-4-2 10:59:45

Visual Basic资源文件的多种使用技巧

一、 开发中英(简、繁)双版本
??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:
??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言
??Option Explicit
??Dim lang As String
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
??Private Sub Form_Load()
??Dim LocaleID As Long
??LocaleID = GetSystemDefaultLCID
?? Select Case LocaleID
?? Case &H404
?? MsgBox "当前系统为:中文繁体", , "语言"
?? Case &H804
?? MsgBox "当前系统为:中文简体", , "语言"
?? lang = "1"
?? Case &H409
?? MsgBox "当前系统为:英文", , "语言"
?? lang = "2"
?? End Select
??End Sub
??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
??标识号 中文(中国)
??101 例子
??102 中文
??103 英文
??201 Ensample
??202 Chinese
??203 English
??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)
??Sub LoadString()
?? Me.Caption = LoadResString(Int(lang & "01"))
?? Command1(0).Caption = LoadResString(Int(lang & "02"))
?? Command1(1).Caption = LoadResString(Int(lang & "03"))
??End Sub
??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。
??二、 实现“绿色”软件
??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序
??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:
??示例:
??1、主程序.EXE
??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
??2、注册程序.EXE
??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
??类型: “OCX”
??标识号: 101
??语言: 中文(中国)
??⑶保存资源文件,写如下代码:
??Option Explicit
??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
??Const MAX_PATH = 260 注释:定义足够长的字符串
??Private Sub Form_Load()
??Dim TempFile() As Byte
??Dim FileNum As Integer
??Dim TempDir As String
?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录
?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组
?? FileNum = FreeFile
?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
?? Put #FileNum, , TempFile
?? Close #FileNum
??
?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
??
?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"
??
?? Unload Me
??End Sub
??
??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数
??Dim S As String, Length As Long
??S = String(MAX_PATH, 0) 注释:赋值
??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度
??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格
??GetWinSysDir = S
??End Function
??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
??注释:如: Dim S As String * 20
??注释: Length = GetSystemDirectory(S, 20)
??3、补充说明
??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
??程序运行
??4、程序运行
??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。
??三、 直接播放EXE文件中的声音文件
??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
??类型: "WAVE"
??标识号: 102
??语言: 中文(中国)
??⑶保存资源文件,写如下代码:
??Option Explicit
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
??Public Const SND_ASYNC = &H1&
??Public Const SND_MEMORY = &H4&
??Private Sub Command5_Click() 注释:播放 WAV 文件
?? Dim bArr() As Byte
?? bArr = LoadResData(102, "WAVE")
?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
??End Sub
??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。
??四、 直接调用各类图标、光标图片
??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。
??⑶程序代码如下:
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标
??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图
??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标
???
??---------------------------------------------------
??
??放一个控制RES资源释放背景音乐的例子:
页: [1]
查看完整版本: Visual Basic资源文件的多种使用技巧