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)

相关推荐

  • Angular中非父子组件间是如何通讯的

    技术Angular中非父子组件间是如何通讯的本篇内容介绍了“Angular中非父子组件间是如何通讯的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大

    攻略 2021年11月15日
  • 编写JavaWeb项目的方法是什么

    技术编写JavaWeb项目的方法是什么这篇文章主要讲解了“编写JavaWeb项目的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编写JavaWeb项目的方法是什

    攻略 2021年10月29日
  • JavaScript中的原型和原型链是什么

    技术JavaScript中的原型和原型链是什么这篇文章主要介绍“JavaScript中的原型和原型链是什么”,在日常操作中,相信很多人在JavaScript中的原型和原型链是什么问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月28日
  • 存储过程中使用事务

    技术存储过程中使用事务 存储过程中使用事务GPS平台、网站建设、软件开发、系统运维,找森大网络科技!https://cnsendnet.taobao.com来自森大科技官方博客http://www.cn

    礼包 2021年12月10日
  • C#windowsform 连接数据库

    技术C#windowsform 连接数据库 C#windowsform 连接数据库using System;
    using System.Collections.Generic;
    using System

    礼包 2021年11月14日
  • MySQL数据分析怎么解决

    技术MySQL数据分析怎么解决本篇内容主要讲解“MySQL数据分析怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据分析怎么解决”吧!作为最为流行的开源数据

    攻略 2021年12月3日