无法在VB6中以阿拉伯语显示日期

时间:2015-07-02 07:06:05

标签: date vb6

我想在VB6中用阿拉伯语显示日期。 但它用英语显示日期。 我在“区域和语言”窗口中设置了以下内容:

  • 非Unicode程序的当前语言:阿拉伯语(埃及),
  • 格式:阿拉伯语(埃及),
  • 地点:埃及

在“区域和语言”窗口中,日期以阿拉伯语正确显示。

我使用以下代码以阿拉伯语显示日期:

MsgBox date

2 个答案:

答案 0 :(得分:3)

VB6并不是开箱即用的。

如果您希望将日期格式化为dd / MM / yyyy,请使用

MsgBox Format$(date, "dd/mm/yyyy")

MsgBox FormatDateTime(date, vbShortDate)

here 指示"short date"Arvo解释

答案 1 :(得分:0)

问题是MsgBox和Format不适用于非ASCII字符。简单的实验。使用编辑框创建表单。将编辑框属性更改为

  • (名称)NotMsgBox
  • Multiline true
  • 字体Arial Unicode MS

    Private Declare Function GetLocaleInfo Lib "kernel32" _
        Alias "GetLocaleInfoA" ( _
        ByVal locale As Long, _
        ByVal lcType As Long, _
        ByVal lpLCData As String, _
        ByVal cchData As Long) _
        As Long
    Const LOCALE_USER_DEFAULT = &H400
    Const LOCALE_NATIVE_LANGUAGE = &H4
    Const LOCALE_NATIVE_COUNTRY = &H8
    Function GetInfo(ByVal info As Long) As String
        Dim rv As Long, data As String
        data = String$(256, 0)
        rv = GetLocaleInfo(LOCALE_USER_DEFAULT, info, data, Len(data))
        If rv > 0 Then
            GetInfo = Left(data, rv - 1)
        Else
            GetInfo = ""
        End If
    End Function
    
    Function Whatever() As String
        Dim str As String
        str = ""
        str = str & "You live in " & GetInfo(LOCALE_NATIVE_COUNTRY) & vbCrLf
        str = str & "You speak " & GetInfo(LOCALE_NATIVE_LANGUAGE) & vbCrLf
        Whatever = str
    End Function
    
    Private Sub Form_Load()
    Dim str As String
    str = Whatever
    NotMsgBox.Text = str
    MsgBox str, vbOK, "Egyptian Arabic"
    End Sub
    

你注意到的是,在Msgbox中,阿拉伯语和埃及语都是乱七八糟的,但是在文本框中它正确显示。如果你现在改变了什么

Function Whatever() As String
    Dim str As String
    str = ""
    str = str & "Long Date is " & Format$(Now, "Long Date") & vbCrLf
    str = str & "Short Date is " & Format$(Now, "Short Date") & vbCrLf
    str = str & "General Date is " & Format$(Now, "General Date") & vbCrLf
    str = str & "Medium Date is " & Format$(Now, "Medium Date") & vbCrLf
    str = str & "You live in " & GetInfo(LOCALE_NATIVE_COUNTRY) & vbCrLf
    str = str & "You speak " & GetInfo(LOCALE_NATIVE_LANGUAGE) & vbCrLf
    Whatever = str
End Function

您会注意到,在长格式和中等格式中,月份显示为?????。它已被正确转换为阿拉伯语,但它已被翻译回ASCII,导致加载?。

你能做些什么?

  • 编写自己的支持Unicode的消息框
  • 使用FM20.dll中的ActiveX控件
  • 编写您自己的日期转换例程。