诚毅小家|集美大学生活【集美大学,诚毅学院,水产学院,师范学院,美术学院,财经学院,体育学院,航海学院,集美学村,石鼓路,龙舟池】

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 522|回复: 0

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

[复制链接]
发表于 2010-4-2 10:59:45 | 显示全部楼层 |阅读模式
一、 开发中英(简、繁)双版本) j) _' @7 m: ]$ x: d
??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:
7 f5 [" ~+ R/ }" H" h9 ^6 ^3 O??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言
9 f/ o0 n7 y# f, n??Option Explicit  X" K7 ?* J9 ]: v* O
??Dim lang As String/ d4 Z9 M- G- {: d- k& }5 F8 ^
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
& O* E2 l& b* i; {: I??Private Sub Form_Load()+ U; Q: ]9 a9 J7 S/ F2 B
??Dim LocaleID As Long
) d+ V: A( W- A; k$ Z/ B4 q??LocaleID = GetSystemDefaultLCID
, {! N$ {  k7 c& k7 S?? Select Case LocaleID
, ?7 x; W. N- V  Q% [* C?? Case &H404
) ^' N; K, p  w" f% t?? MsgBox "当前系统为:中文繁体", , "语言"
( j8 s2 ^) v6 M, \?? Case &H804( L" z* d8 l: D5 ?, z8 A# k; r
?? MsgBox "当前系统为:中文简体", , "语言"% M( z( M2 [6 E! Y( j
?? lang = "1"
& w( f8 L# ~$ ^* j?? Case &H409
! q, d& N) j' r% x, C. f5 |1 U?? MsgBox "当前系统为:英文", , "语言": K' ^. ^) ]7 J; y+ \6 E
?? lang = "2"
, @" z* u  \5 u  ?. M  W6 M?? End Select! Y: [& y& G1 Z% ^5 F
??End Sub
8 }+ {) ?8 A1 S, o1 M??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
& g/ j; C, G; o  A+ k! u??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
+ n. b; T+ }- T/ ~( v??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:# G1 b) z8 L. a
??标识号 中文(中国)3 a6 {  A5 f; l9 @0 w
??101 例子
& I# ~3 O  n! c1 x??102 中文
7 q5 V: F$ h' a- @??103 英文
+ T7 h% M4 n/ ^3 K??201 Ensample
! y# H( }4 b, t3 A, n1 H??202 Chinese+ E9 p! n/ K( u
??203 English
4 Z" L0 B) O$ U' g??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)) q: F6 N) p$ h5 r; [7 F
??Sub LoadString()! Y  t  j7 ~/ w  A" p# G
?? Me.Caption = LoadResString(Int(lang & "01"))
  Z! b. a4 h0 a1 f?? Command1(0).Caption = LoadResString(Int(lang & "02"))& U, F% i5 ^9 i( F" S
?? Command1(1).Caption = LoadResString(Int(lang & "03"))
) n& _, d+ @- @5 y0 x5 s* Y??End Sub
) l8 X! N; D  j! n* m4 i& \% ~??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。) a/ ^& a% Q9 z+ A# R
??二、 实现“绿色”软件
) u) W/ S& B( E( j??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序
; q1 M- a" z1 u( G+ b; n??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:. d* H$ u" e8 z+ Y. j) X
??示例:
. ~6 D0 j# k3 v! q: F4 y??1、主程序.EXE2 E/ N. v  t# ?# ~) ^- c8 W
??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
- {4 p& N+ C1 h: D9 g??2、注册程序.EXE
+ A% @' q' K6 t4 {2 s4 z??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。, R3 {4 f* @3 l9 g' g
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
5 u) M4 d' f" B- Y??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:' l: y+ G; ~. W! e3 G0 e% p; u9 w
??类型: “OCX”& K8 F8 X9 e) ~/ k0 F3 p# I0 A
??标识号: 101
, O0 }( I* w' T8 Q4 g??语言: 中文(中国)% y+ s" @$ D' X$ K
??⑶保存资源文件,写如下代码:
$ w; ^  I# Q; Z  D* m* S+ S& c??Option Explicit
/ A, S" {& d' H1 S??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
6 P1 f( w" ^. S??Const MAX_PATH = 260 注释:定义足够长的字符串
& V  x, b! o* [??Private Sub Form_Load()  E; R0 M3 _. ]! t* h, w0 ?
??Dim TempFile() As Byte
9 f" o' A9 J* C$ b??Dim FileNum As Integer
: m' u  n: z3 [' D1 `# l# U7 d??Dim TempDir As String4 V) Q  W: x! X$ {& ]4 d4 A# V
?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录
, C/ i, \% H+ }, ~( B?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组: T# \. {0 {0 F: U6 h2 I  }
?? FileNum = FreeFile
; m8 f& W7 G+ n/ F; Z* T* c: R?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)* K  [. n6 N1 J) V
?? Put #FileNum, , TempFile
0 G9 f2 @& b1 g4 b% p5 A2 x; m?? Close #FileNum
& ^* e3 y5 C# u! M5 _: M??
1 G5 `# T2 }  i8 K8 Y2 t?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
, z8 G% q1 J; i9 Y/ G( A?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
& A7 S) y) g9 j5 C??
. k2 h' h; `0 ?9 ?, F! `4 q?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"
5 K/ V8 D1 O$ S# r??
* ]% |. v; o. T; s$ w' Z?? Unload Me4 Q/ p. O- D; `- \7 M
??End Sub
7 Q4 Z1 S7 |4 a" I* g??
" {7 H+ s- {1 S8 G& \2 f4 j??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数
; E, B, v( I/ U+ Z7 s( U( ~??Dim S As String, Length As Long
! y+ [. f- \* P1 J8 ^6 U4 T??S = String(MAX_PATH, 0) 注释:赋值; O. [2 C6 ~6 Y0 Y, @* @8 C
??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度
- N2 R. {' `) U2 n* \. s! f5 ]??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格
$ O8 x1 L4 }. C  w; F??GetWinSysDir = S
$ ^( A3 H, g% z* z9 S% ?- F??End Function
3 F# P/ M, c1 k3 F# K1 A% T??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
# j8 p# R0 v5 |5 ]??注释:如: Dim S As String * 20
# v4 Q& d: m. O??注释: Length = GetSystemDirectory(S, 20)3 b2 E% g0 ]9 v0 u! `7 e
??3、补充说明
% _: a% K/ Q( n7 i8 S??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件) ! A% m# V, Q0 {2 y% F2 n% x
??程序运行9 q! h8 E) l4 i1 H) n; w# j
??4、程序运行/ m  k0 Q- O. Z3 u- `5 }
??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。6 U+ G& f( ~$ b0 j) G9 p
??三、 直接播放EXE文件中的声音文件
& g: l! O' [5 ~; F& t" Q??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
$ T0 ]( Q; m5 Z0 Z??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”3 i: O6 h# V' }( |. t
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
8 ~) u" B  z) a1 y! n# H??类型: "WAVE"
  {! x( e$ H( Y0 k2 G  z1 t??标识号: 102
( O7 P( m. o2 T& b1 E' W4 ?3 i??语言: 中文(中国)
# D! @1 j* a7 U1 _2 d??⑶保存资源文件,写如下代码:
4 _# h( q" T  n??Option Explicit% f' K& B/ _+ e( E
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
$ a1 p* e; H& c??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
9 G5 v7 B/ O6 Y4 @: Q# s5 ]??Public Const SND_ASYNC = &H1&+ \: [. W4 o' e! t
??Public Const SND_MEMORY = &H4&$ K# O, ]9 s. V( ^" }$ ~) p
??Private Sub Command5_Click() 注释:播放 WAV 文件
* f: t  D; i+ }( D" _?? Dim bArr() As Byte) h8 K2 Q: j1 g# f. y9 m
?? bArr = LoadResData(102, "WAVE")
, Q# M. D! G  ]/ I?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY. ^, N) V5 Z; @  J2 w
??End Sub# W$ d$ @9 E. ^- `
??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。& p  g$ h! K. q' }5 I. m
??四、 直接调用各类图标、光标图片7 w1 P/ z( D" j
??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。
0 T4 x4 D- l, b$ J- t??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
6 H' {  |; z* W??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。$ G$ U% v! a6 L/ c. C+ J! x
??⑶程序代码如下:9 k& j6 a: }- \3 Q
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标
; a! Q; C& i! D$ t2 z??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图. E1 u5 d# b$ k7 p1 ]
??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标8 l; V- G. X6 s* `/ o: K
???3 P' Y/ I/ l1 `6 W
??---------------------------------------------------  e" H$ ?8 g& O$ \+ i
??3 J! C  `6 r7 Q
??放一个控制RES资源释放背景音乐的例子:. j1 U. z: ]$ @3 Z$ w

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|诚毅小家 ( 小家社区工作室 闽ICP备05007965号 )

GMT+8, 2024-6-10 22:08 , Processed in 0.066231 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表