VB的标准文本框限制了字符总数(好象是64K),请问如何突破其限制?用RichTextBox的话还得带上那个挺大的OCX文件,挺烦的。我用API的SendMessage给标准文本框,好象最多也只能加到128K,而且文本框的SelStart、SelLength属性在64K以外就出现混乱。不知还有没有其他更好的办法?请指教,谢谢!

解决方案 »

  1.   

    还是用RichTextBox好.只带多一个OCX,没什么大问题.
      

  2.   

    直接使用RichTextBox,打包时添加此控件,软件安装时可自动注册。
      

  3.   

    我的思路
    首先打开一个64K以上的文件
    判断如果大于64K就取64k的数据显示在text控件中
    我想text控件显示64k的数据应该滚动条好长好长
    不管多长我们假设它为一页
    当你想浏览下一页时(64K以后的数据)
    就清空text控件中的内容,接着向下取64K!
    其实就是我们始终保证text中的内容不超过64k.
      

  4.   

    Dim DENG$()Private Sub Command1_Click()
    Dim LINE
        CommonDialog1.Filter = "64K文本文件(*.txt)|*.txt"
        CommonDialog1.ShowOpen
    Dim nfile As String
        
        If CommonDialog1.FileName <> "" Then
            nfile = CommonDialog1.FileName
        Else
            Exit Sub
        End If
        
        Open nfile For Input As #1 Len = 1024
        Do Until EOF(1)
            LINE = LINE + 1
            ReDim Preserve DENG$(LINE + 15)
            Line Input #1, DENG$(LINE)
        Loop
        Close #1
        
        VScroll1.Min = 1
        VScroll1.Max = LINE
        VScroll1.SmallChange = 1
        VScroll1.LargeChange = LINE / 10
    End SubPrivate Sub Command2_Click()
        Unload Me
    End SubPrivate Sub Form_Load()
        Text1.Move 0, 0
        frm64KText.Move 0, 0
    End SubPrivate Sub VScroll1_Change()
        Dim i As Integer
        Dim s As String
        
        For i = VScroll1.Value To VScroll1.Value + 15
            s = s + DENG$(i) + vbCrLf
        Next i
        
        Text1.Text = s
    End Sub
      

  5.   

    网上的代码,没有试过:Private Const WM_SETTEXT = &HC
    Private Const WM_GETTEXT = &HD
    Private Const WM_GETTEXTLENGTH = &HEPrivate Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function GetWindowTextLength Lib "user32" _
    Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long'在 form 上添加一个多行的 TextBox(txtlarge). 在 form_load 中添加如下代码:
    Dim lret As Long
    Dim s As String 
    s = String(9000, "X") 
    Me.Show
    lRet = SendMessage(txtlarge.hwnd, WM_SETTEXT, 0&, ByVal s)
    Debug.Print "WM_SETTEXT: " & lRetlRet = SendMessage(txtlarge.hwnd, WM_GETTEXTLENGTH, 0&, ByVal 0&)
    Debug.Print "WM_GETTEXTLENGTH: " & lRet'在 form_resize 中添加如下代码:
    txtlarge.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
      

  6.   

    不用太费劲了,换RichText控件吧,反正也是VB带的。
      

  7.   

    真的只能用RichTextBox吗?我看Win2000的记事本不像是RichTextBox,却能超过64K。虽然它不是VB做的,但我想Windows API中是不是也应该有相关的支持啊?