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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2010-4-2 10:59:45 | 显示全部楼层 |阅读模式
一、 开发中英(简、繁)双版本8 Z! N+ ?$ @" I( [9 v: J
??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:
! t8 b1 G% I# C- y0 y, g??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言
$ I" O, z) r; k5 o. S??Option Explicit7 H) k" {& x5 O) _8 C
??Dim lang As String
5 C9 F/ O" w6 g# a9 m" O, P& J9 N5 B??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
3 I9 y: d' A1 r& o??Private Sub Form_Load()
9 ~" y7 u8 ^6 X0 Z( L% k7 w??Dim LocaleID As Long
' D( v% X5 t6 Y! \# H* W??LocaleID = GetSystemDefaultLCID
  T0 U' A7 \6 P?? Select Case LocaleID  K( e) l6 Z5 D0 j& U3 ^
?? Case &H404  H% q* e% I5 Z
?? MsgBox "当前系统为:中文繁体", , "语言"4 w/ r; d9 H  j
?? Case &H804, |5 N0 w4 Y5 o7 H
?? MsgBox "当前系统为:中文简体", , "语言"
3 X5 _& J' @2 p/ Q# `* n?? lang = "1"4 s3 t0 a5 s& V0 R
?? Case &H409: P: f2 ?1 w! `8 N( }& B
?? MsgBox "当前系统为:英文", , "语言"
8 p; B5 i' {: o4 |* {( r: ~; S9 p) T?? lang = "2": E* s3 @( E2 t$ ?* ~% m
?? End Select
- ^( N& Z3 \5 X# E6 [9 g( w??End Sub
( Q" A" C! L0 ?# L8 ?  F: q??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
; N) I- Z0 q7 H% j6 H) C??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
, L5 Y/ g. s3 S+ T- J??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
& d# ]( N/ T$ W1 U- Z2 ]& m??标识号 中文(中国)* a3 H  i1 [9 _0 I* U! n
??101 例子
1 R! a' }# |) K# P! ]9 N??102 中文
- |0 k! w5 t7 ?" f# X??103 英文
8 O5 l! c* j) F: ~! t' ?) v2 t% z' G??201 Ensample
% S) K; t, [) H8 D0 Q# \??202 Chinese
, ~% [2 D4 q5 S% F# w+ ~7 |* z??203 English
9 t) r( y+ f# A  ]??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString), ^! D& ?7 }2 i
??Sub LoadString()
% {' r+ |+ ?7 N$ ~. ^0 E/ j?? Me.Caption = LoadResString(Int(lang & "01"))
; X+ j: ~9 b- ]9 ]9 l: g4 J; v, p?? Command1(0).Caption = LoadResString(Int(lang & "02"))8 a5 m+ C' G( W+ Z0 `8 l# Y) V
?? Command1(1).Caption = LoadResString(Int(lang & "03"))
4 K& s7 Z8 @: {??End Sub; \" ]% Y0 Q0 X4 d2 R5 l0 G/ r( i
??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。
% I% q3 [- V5 ?( v??二、 实现“绿色”软件
! J8 X$ m  _& g4 X1 ?( R1 i2 z3 V??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序& V4 r2 Q6 s2 Q+ _# u" s
??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:- [' B2 S; t( l: ^/ T  t: i! X
??示例:
4 K% m0 T/ a9 o$ K( N??1、主程序.EXE0 g; I' P  {  T/ X% Z: b
??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
0 ^# K- O/ S" T9 W/ ^) O??2、注册程序.EXE  j( }; V7 T& l) F
??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。
7 H2 g( _8 }: z) f??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
; b# G4 M# z% e3 k& V; [+ d2 d??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:9 R/ a+ ?4 [7 M* {6 s3 X% k
??类型: “OCX”4 Y8 [: V' g$ V, b* I& N
??标识号: 101
  e7 Z$ A# r- U5 A  Q??语言: 中文(中国)
  N! w6 ~3 v. R??⑶保存资源文件,写如下代码:7 Y2 u  C9 t1 K
??Option Explicit
% w& p1 ]$ e0 i8 e( W: P??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long+ ~+ U/ @) T( Z; \
??Const MAX_PATH = 260 注释:定义足够长的字符串
5 d( H4 ?, J% u/ Y0 o??Private Sub Form_Load()0 L7 }6 j9 Q6 f! ^# y8 a8 P8 B
??Dim TempFile() As Byte
: N" W8 s  @8 a6 e% O1 c$ u??Dim FileNum As Integer& p" B2 ?; E3 ~6 ^/ B# b- Y- H8 w
??Dim TempDir As String
) R# s/ _& ?4 \0 ?) B?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录1 r' P0 p6 @/ |: v
?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组) T' }* U- D1 n2 L
?? FileNum = FreeFile' M$ m/ _  ~. {! R6 \4 Q  [6 {
?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下), \) `( e- g4 X5 ?2 p# f
?? Put #FileNum, , TempFile
, d, P3 }" c* I+ b- z& d, X! E?? Close #FileNum
) V0 i7 P9 v3 S1 s" H0 e  Z% D/ a?? $ W2 i% j# C/ v) d
?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框/ u* H) r; ^, j! h- q0 ?
?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框$ J. t1 y5 [6 f( e( }* Q: H
??
- R! G! c$ E7 K7 ]?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"
  O& F: a7 w& v3 g+ Y: k( @; u?? / }( D( b: }3 ^2 l
?? Unload Me
( b; r$ [- j5 Q7 P??End Sub
5 N) k* N; n0 c$ P  u; P9 W??
: F, k+ y) C. @( ?  f9 t5 V??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数
( ~2 Q9 w, P$ }# K3 f5 R9 D" `??Dim S As String, Length As Long
7 L; M2 `- u2 |" I9 ]( [9 n+ u??S = String(MAX_PATH, 0) 注释:赋值
+ i" |" ?* l& [$ i- O; y5 x& B; @; t??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度' y' g) |( B& ]% j4 }4 h% Y
??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格" Y$ N& J/ I) G/ U  |
??GetWinSysDir = S3 b6 [5 R% o2 B4 O( X
??End Function
4 Z8 C* [8 d$ d??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,. y2 s) P; E% Q. w) r
??注释:如: Dim S As String * 20
/ ]0 m1 n. B4 C. j$ O??注释: Length = GetSystemDirectory(S, 20)
, n6 \( M" l6 O/ @$ N" ^' d8 h??3、补充说明9 Z, I4 A) L# x$ P
??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
) u1 R- p+ l! Q! {5 c  K) F??程序运行/ K" c, I" j' N2 D  D
??4、程序运行
, ?8 D- Q- R! m??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。
7 A$ X6 |4 W' N. j( _% f??三、 直接播放EXE文件中的声音文件5 i/ y" m: l4 c" `- |+ s3 a: J/ x; U
??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
0 j9 ~1 V4 E! K2 C??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
% q9 R8 O& [  g- f??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
3 h& y, C! H' q  ^??类型: "WAVE"
& ^1 F% c7 F, V8 T' w) P' B??标识号: 102
6 ^- e7 E2 W& @1 v; A: B% j??语言: 中文(中国)
- o( M0 @  m% {7 f6 @??⑶保存资源文件,写如下代码:
4 b7 R. l  g9 _) u0 h??Option Explicit6 |) h, d7 |: ]0 x5 w0 Z
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long; W) ]) f* K! L( ~
??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
# i" B2 y1 s( }9 f, O) U??Public Const SND_ASYNC = &H1&& @( j% v2 O+ E4 }3 s" ~: Y
??Public Const SND_MEMORY = &H4&6 o9 w: m7 ~# Q8 C; ~
??Private Sub Command5_Click() 注释:播放 WAV 文件
, G1 V! V( z* h3 U2 i?? Dim bArr() As Byte
8 x# S; M& V% z?? bArr = LoadResData(102, "WAVE")
1 o7 w( z7 O; A! v0 P$ Z' C( P* l?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
& T- @& d; x! s- w1 s  \??End Sub
% e6 g; ~9 P$ }; u* e! V+ ^??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。
. B3 K' r. {, ?* x$ I6 c. f  H7 i??四、 直接调用各类图标、光标图片& z+ J/ W, E  ^1 w# ~# s
??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。2 i3 {  T2 Y9 V9 q4 z
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”' v$ Z% Z7 b5 B
??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。
9 _# t: y: Y; X: u3 \! Z5 F4 I??⑶程序代码如下:, B" h  u' I; ]2 K
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标! d! l& v9 J+ c# W) k$ b
??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图
0 ?/ R' H4 V9 s??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标9 W& h' b- O% P- E2 a6 u3 v
???
9 e% x% f1 R/ |& O* @- M??---------------------------------------------------
" y+ P- E# g' C  E3 H0 w3 r& }??
. i" c" g& w9 c  _) ~$ _??放一个控制RES资源释放背景音乐的例子:! ]) e5 b4 t3 }7 w& B% s

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-6-13 12:17 , Processed in 0.075924 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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