【问题标题】:How can I get text from the richtextbox in unicode format in vb6如何在vb6中以unicode格式从richtextbox获取文本
【发布时间】:2012-09-07 18:53:26
【问题描述】:

我尝试从 vb6 中的 Richtextbox 控件中获取文本。但是,unicode 文本不起作用。

text1=richtextbox1.text

这给了我"????"

谁能帮帮我?


此代码不起作用。 我尝试使用以下声明运行它:

Const GTL_USECRLF = 1
Const GTL_PRECISE = 2
Const GTL_NUMCHARS = 8
Const CP_UNICODE = 1200
Const GT_USECRLF = 1
Private Type GETTEXTEX
    cb As Long
    flags As Long
    codepage As Integer
    lpDefaultChar As String
    lpUsedDefChar As Boolean
End Type
Private Type GETTEXTLENGTHEX
    flags As Long          ' /* flags (see GTL_XXX defines)              */
    codepage As Long       ' /* code page for translation (CP_ACP for default,
                            '1200 for Unicode                         */
End Type

我不知道:

EM_GETTEXTLENGTHEX , EM_GETTEXTEX

请发送完整的代码。 (所有声明)

【问题讨论】:

  • 根据this MSDN Blog VB6 RichTextBox 控件实际上并不支持Unicode。它继续建议在 3rd 方控件套件上花费 399 美元,但 IMO 免费下载 VB.NET Express Edition 可能是一个更好的选择。
  • @mahdi:请不要用“谢谢”通知替换问题。该网站旨在帮助其他有类似问题的人,并删除问题使其无用。如果您想跟进,请在已接受的答案上点击并点击左侧的绿色提示。

标签: unicode vb6 richtextbox


【解决方案1】:

真的很简单。以下是没有必需的DeclareConst 等声明的基本内容:

public Declare Function SendMessageWLng Lib "user32" Alias "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const WM_USER = &H400
Public Const EM_GETSCROLLPOS = WM_USER + 221
Public Const EM_SETSCROLLPOS = WM_USER + 222

Public Const CP_UNICODE = 1200&
Public Const GT_USECRLF = 1&
Public Const GTL_USECRLF = 1&
Public Const GTL_PRECISE = 2&
Public Const GTL_NUMCHARS = 8&

Public Const EM_GETTEXTEX = WM_USER + 94
Public Const EM_GETTEXTLENGTHEX = WM_USER + 95

    Public Function RTBReadUnicode(ByVal RTB As RichTextLib.RichTextBox) As String
        'Reads Text from RichTextBox as Unicode text on a system with Rich Edit 3.0
        '(Windows Me, Windows 2000, or later).
        Dim gtlUnicode As GETTEXTLENGTHEX
        Dim gtUnicode As GETTEXTEX
        Dim lngChars As Long
    
        With gtlUnicode
            .flags = GTL_USECRLF Or GTL_PRECISE Or GTL_NUMCHARS
            .codepage = CP_UNICODE
        End With
        lngChars = SendMessageWLng(RTB.hWnd, EM_GETTEXTLENGTHEX, VarPtr(gtlUnicode), 0)
    
        With gtUnicode
            .cb = (lngChars + 1) * 2
            .flags = GT_USECRLF
            .codepage = CP_UNICODE
        End With
        RTBReadUnicode = String$(lngChars, 0)
        SendMessageWLng RTB.hWnd, EM_GETTEXTEX, VarPtr(gtUnicode), StrPtr(RTBReadUnicode)
    End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多