现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 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 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
⑴启动 VB60,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
标识号 中文(中国)
101 例子
102 中文
103 英文
201 Ensample
202 Chinese
203 English
⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)
Sub LoadString()
MeCaption = 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
用 VB60 编写的程序,调用了 Winsock 控件,如果在没有安装 VB50、60 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB50、60 的安装程序进行打包,不然只有用用2的方法来解决了。
2、注册程序EXE
用 VB60 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。
⑴启动 VB60,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsckocx),再双击刚刚创建的自定义资源,d出”编辑属性”窗口,定义如下:
类型: “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 & "\nsckocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
Put #FileNum, , TempFile
Close #FileNum
注释:Shell "regsvr32 " & TempDir & "\nsckocx ", vbNormalFocus 注释:注册控件,有d出对话框
Shell "regsvr32 " & TempDir & "\nsckocx /s", vbNormalFocus 注释:注册控件,无d出对话框
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、补充说明
在用 VB60 保存上述两个程序后,请再使用 VB50 重新打开这两个程序,并编译为主程序EXE、注册文件EXE。(用 VB50 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
程序运行
4、程序运行
将主程序EXE、注册文件EXE两个文件,复制到任意机器上,先运行注册文件EXE注册第三方的控件,再运行主程序EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。
三、 直接播放EXE文件中的声音文件
使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
⑴启动 VB60,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,d出”编辑属性”窗口,定义如下:
类型: "WAVE"
标识号: 102
语言: 中文(中国)
⑶保存资源文件,写如下代码:
Option Explicit
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function sndPlaySoundFromMemory Lib "winmmdll" 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 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。
⑴启动 VB60,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。
⑶程序代码如下:
MeIcon = LoadResPicture(101, vbResIcon) 注释:加载图标
Picture1Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图
Command1MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标
五、到此为此资源文件的多种使用技巧全部介绍完毕,希望这些技巧对大家的编程有帮助,上述程序全部在 Win98、VB50或60下运行通过
---------------------------------------------------
对“如何制作和利用资源文件”的补充
“一、 开发中英(简、繁)双版本”的方法可以使用,更简单实用的方法:
把不同语言文字放在同一个标识号ID对应的不同字符串表格中即可
VB 会自动实现多种语言转换!
本文来自CSDN博客,转载请标明出处:>在vb外接程序管理器中可以添加资源管理器,添加后就可以在工具菜单中调用资源管理器了,打开资源管理器并添加两个自定义资源,我首先添加的是一个文本文件,编号为101,然后添加了一个wav声音文件,编号为102,用loadresdata调入内存播放的,你可以试验一下Option Explicit
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function sndPlaySoundFromMemory Lib "winmmdll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Const SND_ASYNC = &H1&
Private Const SND_MEMORY = &H4&Private Sub Command1_Click()
Dim barr() As Byte, s As String, k As Variant
barr = LoadResData(101, "custom")
s = ""
For Each k In barr
s = s + Chr(k)
Next
MsgBox s
barr = LoadResData(102, "custom")
sndPlaySoundFromMemory barr(0), SND_ASYNC Or SND_MEMORY
End SubBEEP是发出一个提示音,如果要模拟的话,不如自己做一个声音文件,然后播放它
播放代码请看这个
Private
Declare
Function
sndPlaySound
Lib
"winmmdll"
Alias
"sndPlaySoundA"
(lpszSoundName
As
Any,
ByVal
uFlags
As
Long)
As
Long
Private
Declare
Function
sndStopSound
Lib
"winmmdll"
Alias
"sndPlaySoundA"
(ByVal
lpszNull
As
Long,
ByVal
uFlags
As
Long)
As
Long
Private
Const
SND_MEMORY
=
&H4
Private
Const
SND_SYNC
=
&H0
Private
Const
SND_ASYNC
=
&H1
Private
Const
SND_NODEFAULT
=
&H2
Private
Const
SND_LOOP
=
&H8
Private
Const
SND_NOSTOP
=
&H10
Private
arrBound()
As
Byte
Private
arrFired()
As
Byte
Private
arrNoBullet()
As
Byte
Private
Function
PlaySound(ind
As
Integer)
As
Boolean
Dim
r
As
Long
Dim
uFlags
As
Long
uFlags
=
SND_ASYNC
Or
SND_NODEFAULT
Or
SND_MEMORY
r
=
sndStopSound(0,
SND_ASYNC)
Select
Case
ind
Case
0
'Fire
r
=
sndPlaySound(arrFired(0),
uFlags)
Case
1
'Shotted
r
=
sndPlaySound(arrBound(0),
uFlags)
Case
2
'esNoBullet
r
=
sndPlaySound(arrNoBullet(0),
uFlags)
End
Select
End
Function
Private
Function
LoadSound()
As
Boolean
arrBound
=
LoadResData("Bound",
"WAVE")
arrFired
=
LoadResData("Fire",
"WAVE")
arrNoBullet
=
LoadResData("NoBullet",
"WAVE")
End
Function
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)