用WINDOWS的消息机制来实现吧
首先获得TEXTBOX的总行数  用EM_GETLINECOUNT 消息
然后得到当前显示的文本所在行的区间 可以利用卷动的消息计算得之
循环得到区间内各行的文本 用EM_GETLINE 消息
这是编程原理,主要用到SENDMESSAGE函数与WINDOWS的消息机制
如果实现有困难请将E-MAIL留下
有时间我会做一个例程的

解决方案 »

  1.   


    Const EM_LINELENGTH = &HC1
    Const EM_GETFIRSTVISIBLELINE = &HCE
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()
        Dim n As Long
        
        '获得显示的开始行
        n = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
        '获得第1行的字节数
        n = SendMessage(Text1.hwnd, EM_LINELENGTH, 0, 0)
        
    End Sub
      

  2.   

    EM_GETFIRSTVISIBLELINE    得到开始的字符串
    EM_LINELENGTH             得到字符的长度(可以用len函数代替)
    应该不可能得到显示的字符串吧???
      

  3.   

    Const EM_LINELENGTH = &HC1
    Const EM_GETFIRSTVISIBLELINE = &HCE
    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
    Dim Maxlen As Long
    '得到可显示的字符个数
    Private Sub GetDispNum()
        '保存设置
        Dim Txt As String
        Dim SelS As Long
        Dim Sellength As Long
        Dim S As Long
        
        Txt = Text1.Text
        SelS = Text1.SelStart
        Sellength = Text1.Sellength
        Text1.Visible = False
        Text1.Text = String(255, " ")
        Text1.SelStart = 255
        S = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
        Maxlen = 255 - S       '获得
        Text1.Text = Txt
        Text1.SelStart = SelS
        Text1.Sellength = Sellength
        Text1.Visible = True
    End SubPrivate Sub Command2_Click()
        GetDispNum
        MsgBox Maxlen
    End SubPrivate Sub Form_Load()
        '得到text1控件可以显示的字符个数(一个汉字算2)
        GetDispNum
        MsgBox Maxlen
    End SubPrivate Sub Command1_Click()
        Dim n As Long
        Dim I As Long
        Dim Txt As String
        Dim S As String
        
        '获得显示的开始行
        n = SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
        '如果不包含双字节,用下面的方法就可以
        'MsgBox Mid(Text1.Text, n + 1, Maxlen)
        '如果包含双字节则就需要处理字符串了
        '我也没有好办法,只能用笨办法
        Txt = ""
        For I = 1 To Len(Text1.Text)
            S = VBA.Left$(Text1.Text, I)
            If LenB(StrConv(S, vbFromUnicode)) > n Then
                S = Mid(Text1, I, 1)
                If LenB(StrConv(S + Txt, vbFromUnicode)) <= Maxlen Then
                    Txt = Txt + S
                Else
                    Exit For
                End If
            End If
        Next I
        MsgBox Txt
    End Sub
      

  4.   

    好像是用HOOK,先讓WINDOWS重發消息,然後再截獲.