VB
Allen 2011-09-10 09:39:47 4009 0 0 0 0
 上一篇介绍了用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显示语言,基本上就可以完全对应了,还是很方便的!
 
 

【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=Q004vV47Te5w
Tag: VB技巧 编程 TTTBLOG
我也要發一個   ·   返回首頁   ·   返回[VB]   ·   前一個   ·   下一個
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[VB]   ·   返回頂部