VB6实现MUI程序方法是怎么样的

技术VB6实现MUI程序方法是怎么样的这期内容当中小编将会给大家带来有关VB6实现MUI程序方法是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为大家详细讲述的是VB6实现MU

本期,边肖将给大家带来VB6如何实现MUI程序的信息。文章内容丰富,从专业角度进行分析和叙述。看完这篇文章,希望你能有所收获。

我会详细告诉你如何在VB6中实现MUI程序,希望这篇文章能给你的日常开发工作带来一些启示。

之前负责一个用VB6编写的办公自动化系统,运行时需要支持不同语言(英语、中文、日语、德语、法语、西班牙语)之间的切换。本质是实现一个VB6的MUI程序。

困难在于标准控件(标签、文本框等)。)在VB6中显示文本不支持Unicode。但是,字符串是以Unicode存储的,这意味着VB6本身支持Unicode。

VB6中,标准控件显示字符串的过程如下:

1)标准控件首先将Unicode字符串转换为ANSI字符串;

2)标准控件试图将ANSI字符串转换为在其字体中指定的字符集格式字符串。Charset属性;如果转换失败,它将显示为问号(?).

有关详细信息,请参见visual basic 6.0中的:显示unicode字符串。

因此,实现MUI程序的思路有两种:

1)将标准控件替换为支持Unicode的控件;

2)将资源文件中不同字符集的文本转换为ANSI格式,提供给标准控件;

第一种)方法可以是Forms 2.0(fm20 . dll);

2)第二种方式,我在网上找了两篇文章,但是每篇都不到:

a)自动检测语言并在VB6文本框和标签控件中显示Unicode

需要购买ChilkatCharset2控件,该控件不支持日语中的某些标点符号(如全角句点)。

b)如何从ANSI转换为Unicode Unicode到ANSI转换为OLE

测试没有成功。

下面,我将重点介绍我自己的成功实现,它使用了ADODB。Stream(msado25.tlb)。实现思路如下:

1)将程序中使用的文本保存为Unicode格式的资源文件;

资源文本保存为双字节Unicode格式而不是Utf8或Utf7格式的原因可以节省从其他格式到VB6支持的Unicode格式的转换过程。

2)设置字体。标准控件的字符集,用于将文本显示为与程序要显示的语言相对应的字符集,并将支持该字符集的字体设置为“字体”。名称属性。

Ifg_Str。numjapanese0 thencharset=’ Shift _ JIS ‘ text 1 . font . name=’ MSUIGothic ‘ text 1 . font . charset=128 elseifg _ Str。numkorean 0 thencharset=’ ks _ c _ 5601-1987 ‘ Text1。Fo nt。name=’ guli mche ‘ text 1 . font . charset=129 else IFG _ Str。numcentraliusro0 thencharset=’ windows-1250 ‘ Text1。font . Name=’ Arial ‘ text 1 . font . charset=238 nbs

p; ElseIf g_Str.NumArabic > 0 Then      charset = "windows-1256"      Text1.Font.Name = "Traditional Arabic"      Text1.Font.charset = 178          ElseIf g_Str.NumHebrew > 0 Then      charset = "windows-1255"      Text1.Font.Name = "David"      Text1.Font.charset = 177          ElseIf g_Str.NumCyrillic > 0 Then      charset = "windows-1251"      Text1.Font.Name = "Arial"      Text1.Font.charset = 204          ElseIf g_Str.NumGreek > 0 Then      charset = "windows-1253"      Text1.Font.Name = "Arial"      Text1.Font.charset = 161          ElseIf g_Str.NumThai > 0 Then      charset = "windows-874"      Text1.Font.Name = "Angsana New"      Text1.Font.charset = 222          ElseIf g_Str.NumChinese > 0 Then      charset = "gb2312"      Text1.Font.Name = "SimSun"      Text1.Font.charset = 134       ' An alternative is to use Big5:       ' Text1.Font.Name = "MingLiu"       'charset = "big5"       'fontCh = 136          Else      charset = "windows-1252"      Text1.Font.charset = 0      Text1.Font.Name = "Arial" End If

3) 根据要显示的语言,利用ADODB.Stream将资源文件中Unicode格式保存的字符串转换成操作系统的区域语言(Locale)支持字符集的字符串;

' 调用API来获取操作系统默认的区域语言设置(LocaleID)    Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long       ' 将Unicode字符串,转换为指定字符集的字节数组;    ' 用于转换用资源文件中读取的文本;    Public Function ConvertStringToBytes(ByRef strText As String, charset As String) As Byte()            Dim objStream As ADODB.Stream        Dim data() As Byte             ' init stream       Set objStream = New ADODB.Stream       objStream.charset = charset       objStream.Mode = adModeReadWrite       objStream.Type = adTypeText       objStream.Open              ' write bytes into stream       objStream.WriteText strText       objStream.Flush              ' rewind stream and read text       objStream.Position = 0       objStream.Type = adTypeBinary   '    objStream.Read 3 ' skip first 3 bytes as this is the utf-8 marker       data = objStream.Read()             ' close up and return       objStream.Close       ConvertStringToUtf8Bytes = data      End Function  ' 转换为指定字符集的字节数组,转换为ANSI(即LocaleID)对应的字符集的字符串;   ' 用于将ConvertStringToBytes()返回的字节数组转换为GetCharset()字符集的字符串.   Public Function ConvertBytesToString(ByRef data() As Byte, charset As String) As String         Dim objStream As ADODB.Stream       Dim strTmp As String                ' init stream       Set objStream = New ADODB.Stream       objStream.charset = charset       objStream.Mode = adModeReadWrite      objStream.Type = adTypeBinary       objStream.Open             ' write bytes into stream       objStream.Write data       objStream.Flush             ' rewind stream and read text       objStream.Position = 0       objStream.Type = adTypeText       strTmp = objStream.ReadText              ' close up and return       objStream.Close       ConvertUtf8BytesToString = strTmp      End Function     '获取操作系统默认区域语言对应的字符集   Public Function GetCharset() As String      Dim localeId As Long      Dim charset As String             ' 获取操作系统的LocaleId       localeId = GetSystemDefaultLCID()              Select Case localeId                  Case 1033               charset = "windows-1252"          Case 2052               charset = "gb2312"          Case 1041               charset = "Shift_JIS"          Case Else              charset = "windows-1252"      End Select             GetCharset = charset   End Function     '显示资源文本中的文本   Private Sub DisplayText(filename As String)          '保存资源文本中的文本的变量       Dim textBytes As Variant      Dim f As New FileSystemObject       Dim fs As TextStream       '将Unicode文本读取到变量中       Set fs = f.OpenTextFile(filename, ForReading, False, TristateTrue)          Do While Not fs.AtEndOfStream           textBytes = fs.ReadAll      Loop        fs.Close       ' Convert to a Unicode string:      Dim s As String     s = textBytes      Dim t As Long     ' CkString是免费的第三方组件,可自动判定一个字符串所对应的字符集      ' 下载地址:http://www.chilkatsoft.com/download/CkString.zip      Dim g_Str As New CkString       g_Str.Str = s            '获取资源文本所代表的字符集名称,设置对应的字体和字符集到textbox上      Dim charset As String     If g_Str.NumJapanese > 0 Then  '日文          charset = "Shift_JIS"         Text1.Font.Name = "MS UI Gothic"         Text1.Font.charset = 128                ElseIf g_Str.NumKorean > 0 Then '韩语          charset = "ks_c_5601-1987"         Text1.Font.Name = "GulimChe"         Text1.Font.charset = 129                ElseIf g_Str.NumCentralEuro > 0 Then '中欧语言          charset = "windows-1250"         Text1.Font.Name = "Arial"         Text1.Font.charset = 238                ElseIf g_Str.NumArabic > 0 Then '阿拉伯语          charset = "windows-1256"         Text1.Font.Name = "Traditional Arabic"         Text1.Font.charset = 178      ElseIf g_Str.NumGreek > 0 Then  '希腊语          charset = "windows-1253"         Text1.Font.Name = "Arial"         Text1.Font.charset = 161      ElseIf g_Str.NumThai > 0 Then  '泰语          charset = "windows-874"         Text1.Font.Name = "Angsana New"         Text1.Font.charset = 222      ElseIf g_Str.NumChinese > 0 Then '中文          charset = "gb2312"         Text1.Font.Name = "SimSun"         Text1.Font.charset = 134         ' 繁体则使用Big5:         ' Text1.Font.Name = "MingLiu"          'charset = "big5"          'Text1.Font.charset = 136      Else '默认值          charset = "windows-1252"         Text1.Font.charset = 0          Text1.Font.Name = "Arial"     End If      Dim bytes() As Byte     Dim g_OSCharset As String     '获取操作系统默认语言对应的字符集     g_OSCharset = GetCharset()      '先将Unicode资源文本转换成对应的字节数组;     bytes = ConvertStringToBytes(s, charset)      '将字节数组转换成ANSI(即默认字符集)对应的字符串      vbstr2 = ConvertBytesToString(bytes, g_OSCharset)      ' 设置字符串到VB6的标准控件中      Me.Text1.Text = vbstr2  End Sub

上述就是小编为大家分享的VB6实现MUI程序方法是怎么样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52732.html

(0)

相关推荐

  • 全球充电宝排行榜10强,哪个品牌的充电宝更实用更安全

    技术全球充电宝排行榜10强,哪个品牌的充电宝更实用更安全应"悟空小秘书"邀答全球充电宝排行榜10强!哪个品牌的充电宝更实更安全?答:那还要问吗?华为充电宝最好、最安全!理由何在?1⃣️华为充电宝充电时的温度控制在70度的

    生活 2021年11月1日
  • POSTGRESQL10.3 RPM包如何实现主从搭建

    技术POSTGRESQL10.3 RPM包如何实现主从搭建这篇文章主要介绍POSTGRESQL10.3 RPM包如何实现主从搭建,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、POSTGRE

    攻略 2021年11月16日
  • 一寸光阴一寸金英文,关于时间的谚语用英语怎么写怎么说

    技术一寸光阴一寸金英文,关于时间的谚语用英语怎么写怎么说(一)时间是金,其值无价 Time is money. (时间就是金钱或一寸光阴一寸金) Time flies. (光阴似箭,日月如梭) Time has wing

    生活 2021年10月26日
  • Linux WIFI 4G内核怎么配置

    技术Linux WIFI 4G内核怎么配置这篇文章主要介绍“Linux WIFI 4G内核怎么配置”,在日常操作中,相信很多人在Linux WIFI 4G内核怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年11月30日
  • 一文教你如何高效使用 IDEA !

    技术一文教你如何高效使用 IDEA ! 一文教你如何高效使用 IDEA !安装好Intellij idea之后,进行如下的初始化操作,工作效率提升十倍。
    https://mp.weixin.qq.com

    礼包 2021年11月19日
  • 如何进行ASP.NET Web开发框架中的查询

    技术如何进行ASP.NET Web开发框架中的查询本篇文章为大家展示了如何进行ASP.NET Web开发框架中的查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Enterpri

    攻略 2021年11月26日