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)

相关推荐

  • 1元涨1000粉丝软件,抖音如何刷粉丝?

    技术1元涨1000粉丝软件,抖音如何刷粉丝?1元涨1000粉丝软件,抖音如何刷粉丝?身边玩抖音的朋友是越来越多,也就意味着抖音用户大军正在日渐壮大。抖音用户多,自然来网站咨询购买抖音粉丝的朋友就多。抖音粉丝少当然得想点办

    测评 2021年11月11日
  • 如何添加Lombok支持和使用Thymeleaf

    技术如何添加Lombok支持和使用Thymeleaf本篇文章给大家分享的是有关如何添加Lombok支持和使用Thymeleaf,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小

    攻略 2021年11月9日
  • 指针的初步学习

    技术指针的初步学习 指针的初步学习1.指针变量计算机将内存分割为字节,字节可以存储八位的信息,而每个字节都有唯一的地址。如下,如果内存中有n个字节,可以把地址看作0到n-1的数地址
    内容0  
    0101

    礼包 2021年11月15日
  • 汇编 | 8086 DEBUG调试学习笔记

    技术汇编 | 8086 DEBUG调试学习笔记 汇编 | 8086 DEBUG调试学习笔记在8086汇编中DEBUG是个非常实用的工具,并且可以非常明了的查看每一步指令每一个段的相对状态,有利于学习。下

    礼包 2021年11月13日
  • Kafka为什么那么快

    技术Kafka为什么那么快这篇文章主要介绍“Kafka为什么那么快”,在日常操作中,相信很多人在Kafka为什么那么快问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kafka为什么那么快”

    攻略 2021年11月13日
  • 凯撒密码对应表,古典密码安全算法有哪些

    技术凯撒密码对应表,古典密码安全算法有哪些世界上最早的一种密码产生于公元前两世纪。是由一位希腊人提出的凯撒密码对应表,人们称之为 棋盘密码,原因为该密码将26个字母放在5×5的方格里,i,j放在一个格子里,具体情
    况如

    生活 2021年10月25日