在很多网站上都说用SendMessage的GetLine功能,可是,这个是针对TextBox的,我在RichTextBox中总是无法成功,请高手指教一下下啊!

解决方案 »

  1.   

    '没有GetLine用EM_FINDTEXTEX如何?该消息可以指定范围(CHARRANGE )查找
    EM_FINDTEXTEX
    Finds text within a rich edit control.EM_FINDTEXTEX 
    wParam = (WPARAM) (UINT) fuFlags; 
    lParam = (LPARAM) (FINDTEXTEX FAR *) lpFindText; 
     
    其中引用类型FINDTEXTEX 
    FINDTEXTEX
    Contains information about text to search for in a rich edit control. This structure is used with the EM_FINDTEXTEX message.typedef struct _findtextex { 
        CHARRANGE chrg;      // range to search
        LPSTR lpstrText;     // null-terminated string to find
        CHARRANGE chrgText;  // range in which text is found
    } FINDTEXTEX; 
     
      

  2.   

    Const EM_LINEINDEX = 187
     Const EM_LINELENGTH = 193Dim sFileName As String
    Dim WinH As Long
    Dim i As Integer
    Dim LineLength As Long
    Dim charOffset As Long
    WinH = Rich.hwnd
    i = 0  '0为第一行,1为第二行,依次类推
    charOffset = SendMessage(WinH, EM_LINEINDEX, i, 0)  '获得指定行开始位置
    LineLength = SendMessage(WinH, EM_LINELENGTH, charOffset, 0)  '行长度
    sFileName = Mid$(Text1.Text, charOffset + 1, LineLength)  '取行内容
    Debug.Print sFileName
      

  3.   

    最近正在研究这个,呵呵,我还正想开贴讨论呢
     myhgyp(也许是这样的,信不信由你
    我尝试了你的代码,有错,charOffset LineLength 是字节起始和字节个数,用mid有错,
      

  4.   

    不好意思,我只是测试了英文,应该用MidB
      

  5.   

    对于中英文混排的字符串有错。
    midB把字母数字这些当作双字节处理,linelength给出的是中文双自己,数字英文单字节这样统计个数,望高手仔细思考,我在线等,这个问题我一直没有解决
      

  6.   

    我尝试用这样的:
    ss = "我们abc"
    MsgBox MidB(StrConv(ss, vbFromUnicode), 1, 2)
    结果出来不是 我 这个字
    WHY
      

  7.   

    MsgBox StrConv(MidB(StrConv(ss, vbFromUnicode), 1, 2), vbUnicode)
      

  8.   

    综合“myhgyp(也许是这样的,信不信由你) ”和“rainstormmaster(暴风雨 v2.0)”给出的方法,可以得到下列函数(经试验成功)
    Public Function GetLineText(RichTextBox As RichTextBox, LineNum As Long)
       Dim sFileName As String
       Dim WinH As Long
       Dim i As Long
       Dim LineLength As Long
       Dim charOffset As Long
       i = LineNum  '0为第一行,1为第二行,依次类推
       charOffset = SendMessage(RichTextBox.hWnd, EM_LINEINDEX, i, 0)  '获得指定行开始位置
       LineLength = SendMessage(RichTextBox.hWnd, EM_LINELENGTH, charOffset, 0)  '行长度
       'sFileName = MidB(RichTextBox1.Text, charOffset + 1, LineLength)  '取行内容
       sFileName = StrConv(MidB(StrConv(RichTextBox.Text, vbFromUnicode), charOffset + 1, LineLength), vbUnicode)
       GetLineText = sFileName
    End Function在此,谢谢以上各位,给我提供了好的思路,谢谢大家!!