VB的IDE和控件都是不支持Unicode的 所以遇到这些只会是显示问号要正常显示 就得自己用Unicode的API做一个TextBox另外…… 觉得应该可以子类化文本框控件 在控件重画时把默认的ANSI的API替换成Unicode的API应该就可以 下面这段代码就是用两种版本的TextOut函数在窗体上输出那些特殊字符 TextOut1 Lib "gdi32" Alias "TextOutA 是ANSI的,也就是VB默认的 TextOut2 Lib "gdi32" Alias "TextOutW 是Unicode的Private Declare Function TextOut1 Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Private Declare Function TextOut2 Lib "gdi32" Alias "TextOutW" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As Long, ByVal nCount As Long) As LongPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim tS As String
然后换成RichTextBox
利用下面这个代码就可以简单实现~http://www.5ivb.net/down/20/5ivb_1591.asp
返回按指定类型转换的 Variant (String)。
StrConv(string, conversion, LCID)
conversion 参数的设置值为:
常数 值 说明
vbUpperCase 1 将字符串文字转成大写。
vbLowerCase 2 将字符串文字转成小写。
vbProperCase 3 将字符串中每个字的开头字母转成大写。
vbWide* 4* 将字符串中单字节字符转成双字节字符。
vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
vbKatakana** 16** 将字符串中平假名字符转成片假名字符。 vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。 *应用到远东国别。
注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
顺便我也提哈我见到的
我在richtext中,发现这个控件对含有希腊字母等情况下,很多属性不能正常运行
比如输入 “1μ211”到控件中,.selstart=1,.sellength=3
那么结果会显示“μ211”
总之有时它好象认这个字符,有时它也会将那个希腊字母作为两个字节来处理
不知仁兄碰见过没
>顺便我也提哈我见到的
>我在richtext中,发现这个控件对含有希腊字母等情况下,很多属性不能正常运行
>比如输入 “1μ211”到控件中,.selstart=1,.sellength=3
>那么结果会显示“μ211”
>总之有时它好象认这个字符,有时它也会将那个希腊字母作为两个字节来处理
>不知仁兄碰见过没这个是当作全角字符进行处理的,就像处理汉字一样,当前系统的内码(GB)支持它,所以可以认出来;如果你注意过西欧国家的某些特殊字符,例如法语、西班牙语或者德语中的一些形似带音调符号的韵母字符,在当地的操作系统或软件中实际上是以半角符号显示的,这些字符放到其它内码的系统中就会显示为问号。这个例子也是一样,我猜楼主需要显示的克罗地亚语字符也是半角的吧。
我实验过 我们的少数民族语言,是通过字体文件实现的。保存到数据库中的时侯是字母如:bbb ,显示的时侯就是 正确的.
所以遇到这些只会是显示问号要正常显示
就得自己用Unicode的API做一个TextBox另外……
觉得应该可以子类化文本框控件
在控件重画时把默认的ANSI的API替换成Unicode的API应该就可以
下面这段代码就是用两种版本的TextOut函数在窗体上输出那些特殊字符
TextOut1 Lib "gdi32" Alias "TextOutA 是ANSI的,也就是VB默认的
TextOut2 Lib "gdi32" Alias "TextOutW 是Unicode的Private Declare Function TextOut1 Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function TextOut2 Lib "gdi32" Alias "TextOutW" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As Long, ByVal nCount As Long) As LongPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tS As String
tS = ChrW(&H161) & ChrW(&H111) & ChrW(&H17E) & ChrW(&H10D) & ChrW(&H107)
tS = tS & ChrW(&H160) & ChrW(&H110) & ChrW(&H17D) & ChrW(&H10C) & ChrW(&H106)
Me.FontSize = 30
Me.Cls
If Button = vbLeftButton Then
TextOut2 Me.hDC, 10, 10, StrPtr(tS), 10
Else
TextOut1 Me.hDC, 10, 10, tS, 10
End If
End Sub
http://community.csdn.net/Expert/topic/3592/3592537.xml发现在控件里添加Microsoft Forms 2.0 Object Library之后
多出来的标准控件就全是现成的Unicode版了~