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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2010-4-2 10:59:45 | 显示全部楼层 |阅读模式
一、 开发中英(简、繁)双版本
- A3 F3 G, E1 i: A% b* E??现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在 VB 是如何实现得呢的:6 K3 p* L/ Q, U; j" }
??1、 首先通过 API 函数GetSystemDefaultLCID 判断系统的语言
3 s) d+ J( h; ^: T! {0 j+ a??Option Explicit+ a5 {0 a/ ~' W
??Dim lang As String* t0 t1 V" D! Y5 v1 w# }6 }
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
" q2 ^( {4 [7 ?; a, K9 O$ ^: L; T??Private Sub Form_Load()
2 D' a6 @$ L  k" K. X??Dim LocaleID As Long
& A5 w" x' ^! U7 ~??LocaleID = GetSystemDefaultLCID; A& }+ l# t' T+ o
?? Select Case LocaleID  S0 I+ ?4 e' }  B/ d' |
?? Case &H404
0 K1 B9 b2 o0 i1 p?? MsgBox "当前系统为:中文繁体", , "语言"
1 [# |, j: O0 e8 M  G?? Case &H804
! L+ R) D6 R3 X: p3 t* ?5 I; P  `8 ^?? MsgBox "当前系统为:中文简体", , "语言"
; N; K' ]. v. @# ]" ]?? lang = "1"
% r& k4 Z9 b- d% {?? Case &H4094 J' k# [& ^. e' I. q# h
?? MsgBox "当前系统为:英文", , "语言"
/ d' E6 V$ ~* E9 T; a5 E?? lang = "2"
# L/ T; p/ d" I" e?? End Select2 U! m: A+ _! J3 I* N/ o+ \
??End Sub* I6 Q: H8 r! c( @) g2 S; P  Z
??2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI 文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
: I' Q* G1 s; e' R??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”$ ]7 G+ }7 h5 h6 E* }
??⑵在 VB 资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:( e: Q, V- {7 J/ A7 G
??标识号 中文(中国)$ t- l" s7 Q/ d0 {7 h$ S) J
??101 例子
( [5 x8 t8 ?. k( z& B??102 中文
( v& w* b, E7 |??103 英文
8 M6 t: e: b0 h. l) ~??201 Ensample: S6 E0 v( h0 F
??202 Chinese
/ M, m& R. ]$ c8 o9 S* t" n7 f??203 English
' y( b# |' A' O+ S! K, V0 l??⑶保存资源文件,写如下代码:(自定义装载字符的函数 LoadString)
% R6 f3 {! U* H! l??Sub LoadString()6 q  \7 x  i* p
?? Me.Caption = LoadResString(Int(lang & "01"))
% O% H# f$ x. E% Q5 f5 P# s?? Command1(0).Caption = LoadResString(Int(lang & "02"))
$ g2 B* n9 M* a' J2 H* B2 X?? Command1(1).Caption = LoadResString(Int(lang & "03"))
. B: S) D9 r3 {+ i??End Sub
: m, J, d$ N6 S8 \??⑷怎么样一个简单的中英双版本的程序就做出来了,如果把 lang 的值设置为 1,则显示中文,如果把 lang 的值设置为 2,则显示英文。+ e* K+ S+ [' @6 B) I
??二、 实现“绿色”软件: J  f$ k! n, d; q: j, l
??现在非常流行“绿色”软件,不需要什么安装程序只要一个 EXE 文件就可以运行程序# m  s* g) I, I& N4 f" w* `
??了,而在 VB 的编程中有许多地方需要调用第三方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个安装程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB 中怎么用变通的方法实现“绿色”软件呢,请看:
/ I$ p8 j+ b% H8 _2 P1 t" W??示例:7 _: w: n* a& a# Y: Z9 f+ \* P
??1、主程序.EXE
# L  A- Y4 r7 S5 Z1 f* t??用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装 VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用 VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。8 P" o, Z6 _9 I- U; n! L' E
??2、注册程序.EXE
! T  i3 z) @" y7 B; K??用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过 API 函数 GetSystemDirectory 取得系统的 Winddows\System 的目录,然后把 Winsock 控件复制到该目录下,并用 Shell 来完成控件的注册。3 v0 _# a: k3 N
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
/ Q, g2 K: M9 D  V( d! _??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
6 R5 `* f" C+ J??类型: “OCX”) Y, e- U: n5 n- G
??标识号: 1012 n8 y/ `! `5 s( S* h
??语言: 中文(中国)
7 R- G, m& @& p) e2 b8 C# W1 N2 ]) |??⑶保存资源文件,写如下代码:) _9 \+ m( Y# Y( q# q* N/ t  d
??Option Explicit) P: [# W* a" U) K$ @2 L
??Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
5 h6 M; }& K6 k  m( ~8 h* @' ~2 u??Const MAX_PATH = 260 注释:定义足够长的字符串/ G' ~! N# A7 h, e
??Private Sub Form_Load()
# y/ K+ g1 ?, T3 {??Dim TempFile() As Byte5 Q$ D( }8 D6 ]6 p: `( M. g
??Dim FileNum As Integer6 _% ]* U1 e6 g5 V  P
??Dim TempDir As String
& B3 Z) y8 X& A( m; A?? TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录  m( x/ u- B) _! ]& p- N5 n6 h, E1 R3 b
?? TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组
  T0 J% Y/ w' r$ t6 V3 w/ j?? FileNum = FreeFile
6 ^- Y/ z  g% l1 v?? Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
1 A# R" ]) B' _3 j* A& ?  l?? Put #FileNum, , TempFile$ m! c' P& M% }
?? Close #FileNum
1 p6 ~0 \# P" ?/ a?? 7 o9 I8 n% }7 a4 Z1 u0 Z
?? 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
: y- P& P+ l7 l6 ^7 G( N?? Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
7 J8 L$ f( r0 p2 @: D4 {??
; t$ N$ h1 h& V) K  b* R( y?? MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"- C( d% [0 a  i( p/ n9 e2 W/ ^
??
3 I! J2 W5 o. j+ S' m) e4 k?? Unload Me5 A7 T5 W! ?  d
??End Sub) q5 l9 Z' U. H6 N) z7 \
??, z) j5 _. f5 v1 V( f. o3 ?
??Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数; c* D! V9 l- U& i3 w3 w( \. w$ a# m
??Dim S As String, Length As Long# t" V6 u& q3 w: c9 O
??S = String(MAX_PATH, 0) 注释:赋值
: q, Q4 K. |0 j' l' J??Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度& ]- R- n3 E% c5 J# e8 m9 Z% q2 _; n) o
??S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格
- X4 ~- F; t4 t: q??GetWinSysDir = S) U( p, I5 D; C7 Y
??End Function) v5 M& m7 z4 l, b2 A* B; x5 l
??注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
; n; V$ Y. U( o5 u! A??注释:如: Dim S As String * 20
  Z4 U( Y  }2 u) [??注释: Length = GetSystemDirectory(S, 20)( |# L# @/ t, [' b
??3、补充说明+ Y$ Q0 B- Z2 G6 [9 G1 G, w3 \1 o
??在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件) " ~3 e, \. l6 t  G
??程序运行6 t1 w/ D8 j+ G: X* z
??4、程序运行" W7 H' ]! r: X! }
??将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。: w' L( _2 f& a: I/ v+ M
??三、 直接播放EXE文件中的声音文件
- n5 H3 ^4 [+ F7 C$ C9 Q7 j??使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
; t( O' c. Z' F3 ^4 m??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
. S$ i/ j1 \+ C4 }2 B3 k3 R??⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加任意的 WAV 文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:, E: h4 \% ?5 ?+ u# \
??类型: "WAVE"
- E) H  B. S2 C??标识号: 102% W8 j4 U+ q, r, T
??语言: 中文(中国)
9 A, Y# ?) f0 n, l$ e* F, j??⑶保存资源文件,写如下代码:
/ G7 u6 P/ m' L6 J3 j/ S& g) v) E??Option Explicit6 ]% t4 r' F( z
??Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
+ R0 ^& M9 o" u5 p??Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
! t* ^0 N$ J" u' F, ^??Public Const SND_ASYNC = &H1&
% |/ N9 j6 \0 q( U+ E3 c6 R??Public Const SND_MEMORY = &H4&
- \" i# Y" Y6 T??Private Sub Command5_Click() 注释:播放 WAV 文件
  `7 e# j* L- H?? Dim bArr() As Byte
8 R( O+ ]) e8 e& e' Q& [?? bArr = LoadResData(102, "WAVE")5 q& p: [, P8 ]* P- n" t
?? sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY; \& U$ z1 e% H5 }
??End Sub
# z7 J$ D+ F, a??⑷按 F5 运行本程序,点击 Command 按钮,就可以听到你选定的 WAV 文件的声音了。0 G4 v' h  A0 c$ `3 Y
??四、 直接调用各类图标、光标图片
" j0 M+ c0 N8 d& ?( T??在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用 ImageList 控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。+ x4 P% `/ a4 N5 M" P& e
??⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
/ D: s: N: Y: d??⑵在 VB 资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。
" `% E" F4 J- K7 q* T??⑶程序代码如下:4 Y* g% T3 x2 s  i, \* `% l  |
??Me.Icon = LoadResPicture(101, vbResIcon) 注释:加载图标
/ V* T0 ?9 l* d! ^??Picture1.Picture = LoadResPicture(101, vbResBitmap) 注释:加载位图. z" ]8 O: d. M4 i$ W6 _
??Command1.MouseIcon = LoadResPicture(101, vbResCursor) 注释:加载光标
  Y" c3 V- l  n& H0 d2 F???8 [" a$ N8 W. q
??---------------------------------------------------& f* q! L- }; h2 t% X+ d0 U
??
1 s( a$ j. W" ~5 a; \1 t7 z0 D??放一个控制RES资源释放背景音乐的例子:$ m- L1 b2 L, S2 N9 J9 e3 }

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-4-3 11:49 , Processed in 0.051053 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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