Allen
2011-09-10
09:39:47
5637
0
0
0
0
网站名称:用VB创建/读取INI文件,并利用INI文件汉化程序,设置程序显示语言方法(二)
网站地址:
上一篇介绍了用INI文件设置程序显示语言的方法,但那都是正常控件,如果使用了控件数组,那种方法就不能使用了。
下面的方法可以对控件数组进行设置。
1,首先要根据窗体创建INI文件。
Public Sub prCreateIniForArray() '根据控件数组创建INI文件 ' Tao Add to Set Chinese by Ini, --20110816
Dim pFileName, pstr As String
Dim pFileNum, pI
Dim plblName As String
pFileName = App.Path & "ini" & App.EXEName & "_lang_" & Me.Name & ".ini"
pFileNum = FreeFile
Open pFileName For Output As #pFileNum
'写入空行
pstr = " "
Print #pFileNum, pstr
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
plblName = "fraDraw" '----------设定控件数组名称
'写入节名
pstr = "[" & Me.Name & "." & plblName & "]"
Print #pFileNum, pstr
'循环各控件,写入Ini文件
For pI = fraDraw.LBound To fraDraw.UBound '----------设定控件数组名称
If fChkControls(frmInfo, "fraDraw", pI) = True Then '----------设定控件数组名称
pstr = " " & pI & " = " & fraDraw(pI).Caption '----------设定控件数组名称
Print #pFileNum, pstr
End If
Next pI
'处理控件数组结束---)))
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
plblName = "lblData" '----------设定控件数组名称
'写入节名
pstr = "[" & Me.Name & "." & plblName & "]"
Print #pFileNum, pstr
'循环各控件,写入Ini文件
For pI = lblData.LBound To lblData.UBound '----------设定控件数组名称
If fChkControls(frmInfo, "lblData", pI) = True Then '----------设定控件数组名称
pstr = " " & pI & " = " & lblData(pI).Caption '----------设定控件数组名称
Print #pFileNum, pstr
End If
Next pI
'处理控件数组结束---)))
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
plblName = "lblHWY" '----------设定控件数组名称
'写入节名
pstr = "[" & Me.Name & "." & plblName & "]"
Print #pFileNum, pstr
'循环各控件,写入Ini文件
For pI = lblHWY.LBound To lblHWY.UBound '----------设定控件数组名称
If fChkControls(frmInfo, "lblHWY", pI) = True Then '----------设定控件数组名称
pstr = " " & pI & " = " & lblHWY(pI).Caption '----------设定控件数组名称
Print #pFileNum, pstr
End If
Next pI
'处理控件数组结束---)))
'如有多个控件数组,请在下面重复执行上面过程
'----------((
'----------))
'处理完成后关闭文件
Close #pFileNum
MsgBox "Ini file for [" & Me.Name & "] have created success!"
End Sub
然后,在窗体上添加一按钮,执行以下代码,对每个窗体生成ini文件:
Private Sub Command1_Click() ' Tao Add to Set Chinese by Ini, --20110816
frmData.prCreateIniForArray
frmData2.prCreateIniForArray
frmInfo.prCreateIniForArray
End Sub
将各窗体生成的ini文件合并,命名为App.EXEName_Lang.ini。保存目录:App.Pathini
生成的ini文件内容示例如下:
[COMMON]
'此部分为公用过程,请直接添加
LANGUAGE = CHINESE
'LANGUAGE = JAPANESE
'系统语言
WINDOWS=CHINESE
'WINDOWS=JAPANESE
'控件caption字符集
Proportional Font = Simsun
'Proportional Font = MS PGothic
'控件文体内容字符集
Regular Font = Simsun
'Regular Font = MS Gothic
[frmData.lblData]
0 = 工号
1 = 工名
2 = 图纸的种类
'......
[frmData2.lblData]
0 = 工号
1 = 工名
2 = 图纸的种类
3 = 用纸
4 = 横向
'......
[frmInfo.fraDraw]
1 = 1-RC柱
2 = 2-升降机器
'......
[frmInfo.lblData]
1 = (外侧)
2 = (内侧)
3 = (外侧)
9 = A
'......
2,使用INI文件设置窗体显示:在每个窗体中添加以下过程,并在form_load中调用此过程。
Public Sub prSetDisplay_Array() '根据INI文件,设定控件数组显示 ' Tao Add to Set Chinese by Ini, --20110816
Dim pIniFile As String
Dim plblName As String
Dim plblIdx As Integer
plblName = "lblData" '---------设定标签数组名称-----------
pIniFile = App.Path & "ini" & App.EXEName & "_lang.ini"
If Dir(pIniFile) = "" Then
MsgBox "Ini File [" + pIniFile + "] not found !!", vbCritical + vbOKOnly
Exit Sub
End If
Dim pLang$, pPrp_Font, pReg_Font, pWin$
Dim pCharset_data
pLang$ = cfReadIniFile(pIniFile, "COMMON", "LANGUAGE") ' "JAPANESE" or "CHINESE"
pPrp_Font = cfReadIniFile(pIniFile, "COMMON", "Proportional Font")
pReg_Font = cfReadIniFile(pIniFile, "COMMON", "Regular Font")
pWin$ = cfReadIniFile(pIniFile, "COMMON", "WINDOWS") ' "JAPANESE" or "CHINISE"
If (pLang$ = "JAPANESE") And (pWin$ = "JAPANESE") Then
pCharset_data = 1
ElseIf (pLang$ = "JAPANESE") And (pWin$ = "CHINESE") Then
pCharset_data = 1 '128
ElseIf (pLang$ = "CHINESE") And (pWin$ = "CHINESE") Then
pCharset_data = 1
ElseIf (pLang$ = "CHINESE") And (pWin$ = "JAPANESE") Then
pCharset_data = 128
End If
Dim n As Integer
Dim dat$, a$
Dim pFlag As Boolean
n = FreeFile
pFlag = False
dat$ = ""
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
Open pIniFile For Input As n
plblName = "fraDraw" '---------设定控件数组名称
Do While Not EOF(n)
Line Input #n, a$
a$ = Trim(CutQuote(a$))
If a$ <> "" Then
If Not pFlag Then
If UCase(a$) = UCase("[" & Me.Name & "." & plblName & "]") Then
pFlag = True
End If
Else
If Left$(a$, 1) = "[" Then
Exit Do
Else
plblIdx = CInt(GetItem(a$, 1))
If IsNumeric(plblIdx) Then
fraDraw(plblIdx).FontName = pPrp_Font
fraDraw(plblIdx).Font.Charset = pCharset_data
fraDraw(plblIdx).Caption = GetItem(a$, 2) '---------设定控件数组名称
End If
End If
End If
End If
Loop
Close #n
'处理控件数组结束---)))
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
pFlag = False
Open pIniFile For Input As n
plblName = "lblData" '---------设定控件数组名称
Do While Not EOF(n)
Line Input #n, a$
a$ = Trim(CutQuote(a$))
If a$ <> "" Then
If Not pFlag Then
If UCase(a$) = UCase("[" & Me.Name & "." & plblName & "]") Then
pFlag = True
End If
Else
If Left$(a$, 1) = "[" Then
Exit Do
Else
plblIdx = CInt(GetItem(a$, 1))
If IsNumeric(plblIdx) Then
lblData(plblIdx).FontName = pPrp_Font
lblData(plblIdx).Font.Charset = pCharset_data
lblData(plblIdx).Caption = GetItem(a$, 2) '---------设定控件数组名称
End If
End If
End If
End If
Loop
Close #n
'处理控件数组结束---)))
'处理控件数组开始---((( 如有多个控件数组,请在下面重复执行此过程
pFlag = False
Open pIniFile For Input As n
plblName = "lblHWY" '---------设定控件数组名称
Do While Not EOF(n)
Line Input #n, a$
a$ = Trim(CutQuote(a$))
If a$ <> "" Then
If Not pFlag Then
If UCase(a$) = UCase("[" & Me.Name & "." & plblName & "]") Then
pFlag = True
End If
Else
If Left$(a$, 1) = "[" Then
Exit Do
Else
plblIdx = CInt(GetItem(a$, 1))
If IsNumeric(plblIdx) Then
lblHWY(plblIdx).FontName = pPrp_Font
lblHWY(plblIdx).Font.Charset = pCharset_data
lblHWY(plblIdx).Caption = GetItem(a$, 2) '---------设定控件数组名称
End If
End If
End If
End If
Loop
Close #n
'处理控件数组结束---)))
'如有多个控件数组,请在下面重复执行上面过程
'----------((
'----------))
End Sub
3,也需要一些公用过程支持,除了方法(一)中的公用过程,还需要以下过程支持,请将以下代码添加到公用模块中。
Public Function fChkControls(frmObject As Form, strControlsName As String, lngIndex) As Boolean
On Error GoTo Err
Dim strContrName As String
If lngIndex >= 0 Then
strContrName = frmObject.Controls(strControlsName)(lngIndex).Name
Else
strContrName = frmObject.Controls(strControlsName).Name
End If
fChkControls = True
Exit Function
Err:
fChkControls = False
End Function
这样,用INI设置VB显示语言,基本上就可以完全对应了,还是很方便的!
Tag:
VB技巧
编程
TTTBLOG