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)

相关推荐

  • 和田玉价格走势,和田玉价格是怎样涨起来的

    技术和田玉价格走势,和田玉价格是怎样涨起来的以下是鸿璐的一些浅见和田玉价格走势,希望对您有所帮助和田玉历史悠久,从古至今备受人们喜爱!和田玉润更是以其优秀的润度屹立于玉石行列的顶端!和田玉的“羊脂白玉”更是以其白中有润,

    生活 2021年10月22日
  • 绩点换算,5分制绩点怎么换算成百分制

    技术绩点换算,5分制绩点怎么换算成百分制您好绩点换算,澳大利亚留学研究生申请条件:国内211大学,大学平均成绩75分以上;非211大学,平均成绩80分以上;目前八大里的西澳大学,阿德莱德大学都是算加权平均分,不算马哲或者

    生活 2021年10月23日
  • 抖音刷赞推广平台,抖音粉丝增加方法?

    技术抖音刷赞推广平台,抖音粉丝增加方法?自从短视频火爆以来就产生了一个新的产业,那就是刷数据了,刷粉原理呢就是在一些兼职平台下单,让平台注册的用户帮你去刷这些数据,当然了这是比较高端的方式,其实市面上还是有很多打着真人粉

    测评 2021年10月20日
  • jvm内存结构及原理(jvm内存结构讲解)

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

    攻略 2021年12月21日
  • sqlserver中的int型转为decimal(sqlservercast语法)

    技术怎么浅析SQLServer中的Scanf与Printf怎么浅析SQLServer中的Scanf与Printf,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题

    攻略 2021年12月20日
  • redis中RedissonLock如何实现等待锁

    技术redis中RedissonLock如何实现等待锁今天就跟大家聊聊有关redis中RedissonLock如何实现等待锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年11月11日