For index= 0 To intlinecount - 1
                buff = Space(255)
                SendMessage richtext1.hwnd, EM_GETLINE, index, ByVal buff
                ss(index) = Trim(buff)
            Next
在98下面能读取richtext中的每一行到ss数组
在2000下有时候读取没有问题,有时候读取的行为空值,怎么回事

解决方案 »

  1.   

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Sub Command1_Click()
    intlinecount = 1
    Dim ss() As String
    ReDim ss(100)
    Dim buff As String
    For Index = 0 To 100
        buff = Space(255)
        SendMessage Me.RichTextBox1.hwnd, &HC4, Index, ByVal buff
        ss(Index) = Trim(buff)
        If ss(Index) <> Chr(0) Then List1.AddItem ss(Index)
    Next
    End Sub
    米有任何问题
      

  2.   

    dim buff as string *256
    For index= 0 To intlinecount - 1
                    buff = ""
                    SendMessage richtext1.hwnd, EM_GETLINE, index, ByVal buff
                    ss(index) = Trim(buff)
                Next
    现在在2000下基本能读出,有时候还是会什么也没有(不象原来的间断行),没有规律可循,我认为是循环后的字符串清空出错,马上就散分,快来看看。
      

  3.   

    // ss(index) = Trim(buff)取出字串实际内容的时候,不建议用trim之类的函数,原因是,有可能出现控件中某一行的内容全部是空格的时候
      

  4.   

    //现在在2000下基本能读出,有时候还是会什么也没有(不象原来的间断行),没有规律可循,我认为是循环后的字符串清空出错,马上就散分,快来看看。也不全是这样,你的用法有问题:
    在调用SendMessage发送EM_GETLINE消息时,lParam参数(可用字串,也可用byte数组)的前两个字节要指明允许存放的最大长度,其中第一个字节为低位,第二个字节为高位
      

  5.   

    呵呵,问题解决了吗?
    还是我来说两句吧,上面我已经说过你在发送EM_GETLINE消息时有问题,其实这个不是关键,即使你的处理没有问题,恐怕你也不太可能正确的取出某一行的文字内容(当然,如果该行都是英文还是可以的),原因是richtextbox并没有提供对EM_GETLINE消息的正式支持
      

  6.   

    回答 rainstormmaster(暴风雨 v2.0) 
    也回答其他DX
    代码的目的是想实现,把RICHTEXT中的字符按行读取,存到数组中,在98下,顺利读取字符,但是在2000和XP下,有时候顺利读取,有时候什么也没有得到,通过设置断点,发现SendMessage richtext1.hwnd, EM_GETLINE, index, ByVal buff后,就出现问题了,此时缓冲Buff为“”
    和Trim没有关系,没有运行到Trim就出现Buff为“”了,问题我估计就出在缓冲这里
    大家继续,解决了重谢
      

  7.   

    rainstormmaster(暴风雨 v2.0) 
    DX在线上,太好了
    richtextbox并没有提供对EM_GETLINE消息的正式支持,看来我只有接受这个解释了,我是想实现把大块文字有行距地显示,实现方法是把文字读到Richtext中,按行读取Richtext地字符到数组,读取数组把字符画到前台,谁叫VB的字符控件都不支持行间距,DX有没有其他高招
      

  8.   

    可以考虑用EM_GETTEXTRANGE取出某一行的内容(用google搜索可以找到具体的用法),也可以考虑用vb自带的mid函数实现(这两种思路都要先用sendmessage发送EM_LINEINDEX消息获得起始字符索引,然后用sendmessage发送EM_LINELENGTH消息获得要取出的字节数)