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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2010-4-2 10:59:45 | 显示全部楼层 |阅读模式
一、 开发中英(简、繁)双版本/ _# n( _! p; l# i; [5 @
??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:
9 \( B: }& K8 C9 j8 P' \5 z' d; S??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言) E$ t! s" E. P. l  ~1 g
??Option Explicit4 z5 d( o" [9 r
??Dim lang As String0 I) e2 U4 O/ J4 Q5 y% ^' a
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
) y& n5 Y0 R4 i??Private Sub Form_Load()0 T' A0 G3 [6 V* w7 K
??Dim LocaleID As Long
* B" _# R: n* |??LocaleID = GetSystemDefaultLCID
  `" m( ^7 g6 W! G* H/ f?? Select Case LocaleID, r# X+ R4 t! V' S% Z  T
?? Case &H404' \2 \7 N8 T# b$ k5 s
?? MsgBox "当前系统为:中文繁体", , "语言"
6 W  Y! W; o3 y8 J) A: X?? Case &H804* r9 q$ C" g. }/ t, T
?? MsgBox "当前系统为:中文简体", , "语言"
( h  F) s2 E# i. v) i?? lang = "1"# D4 p  o, E! r6 B) X4 }% n4 Y/ Y: {
?? Case &H4093 p( P/ A4 D* T: ^% y  j
?? MsgBox "当前系统为:英文", , "语言"% w" o3 u( g" U* y  T% ^
?? lang = "2"
6 y, i' h3 e3 C7 W: \( k& l4 }+ ??? End Select9 G7 n, G' X  B6 D% L1 i
??End Sub- q0 `& Z, }4 s: Y- o  J6 Q3 u
??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。5 f% B  q/ ^6 Z- Z' t) G
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
; E- o4 N' Z* @??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
- b" [2 l/ K  g' C" p??标识号 中文(中国)
* M2 w" Q6 [; Y??101 例子
- J3 ]* _8 ^! L6 I3 d' H$ l??102 中文: _+ R6 d$ y1 G( d8 O* U4 f
??103 英文8 d7 M2 ^  f6 V' e
??201 Ensample+ @! b8 T- o& c* j
??202 Chinese- ~/ H  B& |2 s
??203 English
2 J3 c7 ?% f7 @4 I4 J$ v" \6 d??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)
* ]0 M% I5 v+ N8 U8 c/ n/ y??Sub LoadString()
6 c* _4 z4 G# [4 x& Y?? Me.Caption = LoadResString(Int(lang & "01"))
( g5 i& z/ R' q?? Command1(0).Caption = LoadResString(Int(lang & "02"))' ~4 z3 C4 L7 w  @/ v6 a
?? Command1(1).Caption = LoadResString(Int(lang & "03"))
; _9 K0 ?6 @& q  ?) o??End Sub
1 i, [) C, Z0 x& N! j??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。7 v% T9 ?2 }( C* w) u( a
??二、 实现“绿色”软件
& P) e5 w8 h2 @9 y/ T??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序
- \; B, K( D+ M4 `! b??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:
; u& s  V1 E& B& n??示例:. Q7 D& b! j7 [- h0 ~) P' D
??1、主程序.EXE+ f. a1 S, n$ P
??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
2 F8 P: ~3 h7 D# d$ P??2、注册程序.EXE; r1 C; G2 P+ T7 ]3 \  s( p
??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。) M* E8 w& X9 e, }. Q- R9 ]  v  Y
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”$ ]) y# w; q# c; ~% R
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:$ G: M/ G3 W4 h- ?! |
??类型: “OCX”
5 p- \# q& K/ V: y, s6 j- I9 n??标识号: 101
! p: y( q; P9 T8 O8 w$ \??语言: 中文(中国)3 j, F0 \8 I8 U0 `0 b
??⑶保存资源文件,写如下代码:! O( M! m# z7 _2 [
??Option Explicit: _+ A. d! m) l0 L9 G! b/ M
??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long- g( L# b* {, U! D
??Const MAX_PATH = 260 注释:定义足够长的字符串
  N4 f# r, Q% F- X& f$ p: o??Private Sub Form_Load()
( C1 y0 X  ]  v7 o) Z+ N??Dim TempFile() As Byte& z; Z1 y, X' A8 w/ o5 ?  q! R
??Dim FileNum As Integer
% m6 g- i* W3 ^" p: J- S, }??Dim TempDir As String" X+ t2 W! ^+ m: `6 f( h
?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录8 h" R# W9 h* U8 p2 q
?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组# l$ g. z6 z, e/ b5 H
?? FileNum = FreeFile
; Q4 [2 Q# N, ^?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
3 N$ n5 E- \/ O) g' _, S: o?? Put #FileNum, , TempFile
6 _1 p% U& M2 z7 ]?? Close #FileNum
" Q4 z& ~8 |: e) T) }' f??
  Q; u) |( `: e5 g( c+ {9 S" P?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
$ p5 g3 h0 {3 H+ A. j?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
1 {3 j9 h& \5 L?? # N! ~% l- y% K4 t2 o% c- r6 ]
?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"2 h% X0 ~3 w# z
??
! F( H4 J6 }6 p2 c! a?? Unload Me1 X# t" B0 O" @: n" L" S8 A! A
??End Sub1 m. ]. K6 c1 a6 E  ^1 v$ M& e
??2 ~) Z4 [- d  E) d& c
??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数
9 t, I- w* H1 R' a. g/ B??Dim S As String, Length As Long4 N8 v, G+ w6 D, H: V3 F1 q
??S = String(MAX_PATH, 0) 注释:赋值& {8 P+ G+ X2 N$ b7 q4 Y
??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度& m# L, r8 ]! I8 p. \8 K* e6 [
??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格* t" D# H7 L0 G8 {7 a" Y6 F
??GetWinSysDir = S% m" k( E$ P0 q( F8 e* B
??End Function
+ r# r+ |  p% Y) ?1 H- B??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,# V' \# [( |; X4 `0 {
??注释:如: Dim S As String * 20- ]3 V; ~+ M" f/ J7 g
??注释: Length = GetSystemDirectory(S, 20)
8 ^9 S) h0 B4 d' O! F% h??3、补充说明1 K  y) s% t: Y4 ?
??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
3 D3 {; z$ ^) m% o+ w* N??程序运行! }! L. R7 m3 |8 i
??4、程序运行
9 Q7 g! Y, l) [??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。
1 {6 y6 N% ]9 k8 c  p6 H5 U??三、 直接播放EXE文件中的声音文件
6 P) P9 ~  C# Q9 J4 M??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
# r7 I$ ?2 t1 m9 C# z??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”, B( [+ l6 v3 n) }/ E
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:$ B( s4 Y/ i2 k0 j; L# }
??类型: "WAVE"
+ q$ ~" f5 b* f: Q5 b??标识号: 102" N3 h" E! i/ ]7 q
??语言: 中文(中国)
% H5 D5 w( P8 J8 Z$ L??⑶保存资源文件,写如下代码:' B1 k, S& z9 d3 k
??Option Explicit+ F% k$ R% Y. @
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
( W8 [% @6 k# a9 q* [??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long, k5 l2 b% j) Y
??Public Const SND_ASYNC = &H1&
3 b& B' s/ I1 s" d6 E% N6 K??Public Const SND_MEMORY = &H4&
' b' W. t4 H) S6 _1 M) b& x' f??Private Sub Command5_Click() 注释:播放 WAV 文件6 y1 ?/ K0 }; d3 H' ]
?? Dim bArr() As Byte1 G  n+ g/ i, o1 _3 B: W
?? bArr = LoadResData(102, "WAVE")% P, |: i2 V) x& T! a2 Q
?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
# P5 c, O0 G! K$ b??End Sub$ E0 E$ {( ~1 W% e+ }! B
??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。
8 f: l; j9 n( r??四、 直接调用各类图标、光标图片
; ^, K4 ~1 i/ k8 f8 g1 f??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。2 ?6 w- p6 a7 A# G$ |$ {0 S" Z) d
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
! j$ }8 w. {5 X: m2 O& ~; K??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。# o9 \6 @# U2 h# r/ I& O
??⑶程序代码如下:( [6 N% g  ^6 k; U, I. F& G7 z. {
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标/ B3 ^6 E9 D2 ]. v
??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图
; y( J3 c; m9 q??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标/ m7 @3 P$ y% [: l* w
???
) d% e  Y. @# @3 W??---------------------------------------------------
0 G6 T& H! k, T5 v5 u# H??
6 E8 K( d. @, y$ m  g* R??放一个控制RES资源释放背景音乐的例子:
  m0 Q, p3 n# s5 n. M% n- k" Y

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-21 18:51 , Processed in 0.062841 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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