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