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

 找回密码
 注册

QQ登录

只需一步,快速开始

帖子
热搜: 活动 交友 discuz
查看: 505|回复: 0

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

[复制链接]
发表于 2010-4-2 10:59:45 | 显示全部楼层 |阅读模式
一、 开发中英(简、繁)双版本
& P% l- L( @' `% P) o??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:, A( V6 A& Y4 ^
??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言' M4 e/ g; h6 `  A( Z* K9 B
??Option Explicit
1 H7 K8 \5 v9 h0 F- y??Dim lang As String2 V, O1 u" _  r8 D4 J' r8 r. g
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long& u8 H2 t) \! ?' B4 S  l
??Private Sub Form_Load()
% b  n" @% ?% c. x6 q6 L??Dim LocaleID As Long
) J+ d1 v, u: e2 a??LocaleID = GetSystemDefaultLCID7 \3 i7 e, @' K- E6 C. g) ]7 V* R# z
?? Select Case LocaleID
! L4 d% J8 `1 c- y# B?? Case &H404' m) Z! O3 R- |& N6 P8 J
?? MsgBox "当前系统为:中文繁体", , "语言"4 j. k  ~: N; X
?? Case &H8049 F: K! y0 ]* Q  ?5 w
?? MsgBox "当前系统为:中文简体", , "语言", V/ U2 C5 @& c) r8 |) E. j) d# y7 M
?? lang = "1"5 Y1 j4 B' k8 K& B5 v
?? Case &H409) z2 \0 t: u) k
?? MsgBox "当前系统为:英文", , "语言"
: j9 b+ K$ w( X# b1 p/ N' o?? lang = "2"1 {. u- I. U7 e; R4 S/ K% _
?? End Select2 o- K: U: U- U5 k1 v( R0 ?
??End Sub
* |% j" E4 C  a- I??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。; N. }5 Z' Y2 M1 u
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”7 g4 S2 a  X. R
??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
5 ^" o& Z4 w5 M& k) ~: s/ v  b??标识号 中文(中国)' c+ a5 y; \; ^; f4 y+ F& ?
??101 例子$ s$ B9 S/ C. p: @" m/ J- K
??102 中文
+ y' l! V! }+ _) s6 G??103 英文) P* A, D9 A& _0 L
??201 Ensample
0 E5 Y6 S; ~) k& E( J/ g??202 Chinese8 F6 B6 T+ ]6 r+ f; _, _3 ~4 Y6 ]2 Q
??203 English5 q+ j/ n) H" ]! P. {: {3 F
??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)1 e' T3 k+ C& h! o; c, w
??Sub LoadString()) w4 ]- e3 j, j8 o+ \5 u2 z
?? Me.Caption = LoadResString(Int(lang & "01"))
( z" ?& u7 i/ q- y?? Command1(0).Caption = LoadResString(Int(lang & "02"))! R4 e' I" K' d( u- n/ b
?? Command1(1).Caption = LoadResString(Int(lang & "03"))7 z1 z1 Q9 ^" d! f8 c  d6 h
??End Sub2 Y3 x$ A% ~5 m8 Z! [1 q$ F$ i
??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。. k2 V5 M  f1 }
??二、 实现“绿色”软件
% `$ K" F( @' G+ W/ t( a??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序* e* V6 F8 K% u4 N. g
??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:# u- I. G9 J/ z7 P
??示例:
4 A/ {- n9 k8 |3 f??1、主程序.EXE
% B5 f5 @- R- ]& S??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
$ b5 C9 G( U) K3 c  U" P??2、注册程序.EXE: Y% R9 ~; x; e0 Y3 @( a
??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。
$ ^, g4 |$ M) v8 }5 f( i??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”9 M  |3 s4 q1 K% u
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
) e3 W6 P$ `# K  J8 L' A??类型: “OCX”
0 [5 j  [* O& e) p??标识号: 1011 c; e+ p  j: s' X/ o* o3 @
??语言: 中文(中国)) r( e; H) q' }2 O3 [+ l8 m/ p
??⑶保存资源文件,写如下代码:
  w3 j! y0 z7 M??Option Explicit' S% a% H3 }/ p3 r
??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long6 o0 o" z; X- A. N' n. w" ~
??Const MAX_PATH = 260 注释:定义足够长的字符串- ^4 Z  _' W: w, k6 t# a+ ?, w. n! l; K
??Private Sub Form_Load()) v& g8 f, C# G: B) g% B+ q
??Dim TempFile() As Byte9 ^4 P8 B4 C3 c! y
??Dim FileNum As Integer- |0 D6 l8 Z  P& S3 c" W# u3 J
??Dim TempDir As String
& L, p7 F/ D+ s* X+ Q# I?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录
3 T7 ]1 d) a3 }  P4 Q, g. [?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组# j: E' u% t7 `, {9 w  z) z
?? FileNum = FreeFile
: k; E3 U$ I6 z: y3 _$ D# q?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)9 E1 `: K2 P: x
?? Put #FileNum, , TempFile1 T: c1 j1 o, r; |! {1 j
?? Close #FileNum( W6 x% X1 f& [+ n; C
??
1 T% Y% f: ^+ {! `?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
- k1 w% w: |: d5 K0 L4 [?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
7 p( ~, ^2 H0 i; X( F! t7 {?? ( |, {) x+ D( r0 `
?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件": Y& L+ F8 W3 G* `
?? ; Q9 w& B$ B' `
?? Unload Me
! P; {0 p. t. S2 c??End Sub
5 q# {. J$ w% p% l: c. g0 _* ]??4 W- ~+ x- l: `0 r% S; ~- _! t2 L" l
??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数4 S( h% P+ e! w/ B) d
??Dim S As String, Length As Long* q. ^; U4 o5 B5 G' |
??S = String(MAX_PATH, 0) 注释:赋值
8 S0 w) K, F- i  y, h' I8 i9 R" p??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度8 X( s4 u6 Y/ S, k& M# T
??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格: c) t' E) E- a7 D$ g' E% X6 B
??GetWinSysDir = S
+ P8 `1 S# ]$ R' H9 u??End Function- A" v  g/ A5 o  |
??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,) U* {8 H6 I% ]4 r
??注释:如: Dim S As String * 20( F) \6 w' E3 Y6 J3 {
??注释: Length = GetSystemDirectory(S, 20)
! C6 `* v, W3 O  a& ^??3、补充说明5 }) {2 c& y: Z1 `) v
??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件) $ W  ?% m% G" n7 x/ r# r' r7 e
??程序运行' o' ]. v, p5 s4 V' {/ k9 h8 z' a
??4、程序运行9 H: ?3 B6 C1 T- c2 _$ F
??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。: d( p4 ~! G3 ]1 Z9 m$ ~/ M+ r
??三、 直接播放EXE文件中的声音文件/ q  m# t$ T' _% `
??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。, r( o& l; x( I6 e) ?
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”% ]2 i" g, q/ d' X& R
??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
, J3 U$ J, j# n2 [" c??类型: "WAVE"' z/ S- d) u! Y5 S8 L2 T! s
??标识号: 102& U9 F, N9 Y9 x1 a7 o- r, b6 ?
??语言: 中文(中国)/ m, n6 {' v7 I/ j
??⑶保存资源文件,写如下代码:. m1 t% k/ {$ X( `
??Option Explicit
: i' i; i: e  V??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long2 v9 l& c$ ], o, U$ p5 d8 S
??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
( l6 w8 |' z0 W) S8 U. O9 I, |/ N??Public Const SND_ASYNC = &H1&5 v( Q! c2 n3 ]5 C4 I! h& S
??Public Const SND_MEMORY = &H4&
3 u& L7 ]& l8 {/ {! q??Private Sub Command5_Click() 注释:播放 WAV 文件
/ p$ H* Z9 M% C: j8 }?? Dim bArr() As Byte
$ d8 K' f' j' u* O0 s?? bArr = LoadResData(102, "WAVE")
* R- w4 }5 E1 q' Q. B3 m* r?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY+ l1 l2 h) ?' L7 o2 y, q* y) e
??End Sub$ }0 q  K9 Z; X+ n
??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。6 R$ s: @# T9 u- Y5 j2 _+ w
??四、 直接调用各类图标、光标图片
: m* M. Z& v9 q/ C; O??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。+ Y" ]( Y0 o/ o8 H; q
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
- o/ U8 D5 V( `+ ]8 ~9 y8 ?2 L??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。9 w' F; I8 t" I' l# l- M
??⑶程序代码如下:5 d1 E+ R1 ~% z' @' c$ R
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标
! T) o7 M, C/ B8 U??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图) T. u) D+ k  w' @8 s
??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标
4 o5 Z# }6 k5 n3 ?9 D& Y' e???
+ M+ Z, v- U! G/ U1 o) o??---------------------------------------------------
1 _1 |# K9 M/ P/ [; l8 v+ [; O+ G??
( C- a3 U. \( F# s??放一个控制RES资源释放背景音乐的例子:* R4 |+ v" s5 P: E' U

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-1-2 16:38 , Processed in 0.055603 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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