向cuizm(射天狼 http://www.j2soft.cn/)学习了:) 再加上从网上Copy来的一个函数,当文本框内存在自动折行的超长行时,效果与cuizm的稍有不同 Private Const EM_LINEFROMCHAR = &HC9 Private Const EM_GETLINE = &HC4 Private Const EM_LINELENGTH = &HC1 Private Const EM_LINEINDEX = &HBB 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 Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Private Sub Command1_Click() Dim nLine As Long Dim strContent As String
strContent = Text1.Text nLine = SendMessage(Text1.hWnd, EM_LINEFROMCHAR, Text1.SelStart, 0) TB_GetLine Text1.hWnd, nLine, strContent MsgBox strContent End SubSub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String) Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&) length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&) If length > 0 Then ReDim bArr(length + 1) As Byte, bArr2(length - 1) As Byte Call RtlMoveMemory(bArr(0), length, 2) '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度 Call SendMessage(hWnd, EM_GETLINE, whichLine, bArr(0)) Call RtlMoveMemory(bArr2(0), bArr(0), length) Line = StrConv(bArr2, vbUnicode) Else Line = "" End If End Sub
再加上从网上Copy来的一个函数,当文本框内存在自动折行的超长行时,效果与cuizm的稍有不同
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_GETLINE = &HC4
Private Const EM_LINELENGTH = &HC1
Private Const EM_LINEINDEX = &HBB
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 Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Private Sub Command1_Click()
Dim nLine As Long
Dim strContent As String
strContent = Text1.Text
nLine = SendMessage(Text1.hWnd, EM_LINEFROMCHAR, Text1.SelStart, 0)
TB_GetLine Text1.hWnd, nLine, strContent
MsgBox strContent
End SubSub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String)
Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long
lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&)
length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&)
If length > 0 Then
ReDim bArr(length + 1) As Byte, bArr2(length - 1) As Byte
Call RtlMoveMemory(bArr(0), length, 2) '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度
Call SendMessage(hWnd, EM_GETLINE, whichLine, bArr(0))
Call RtlMoveMemory(bArr2(0), bArr(0), length)
Line = StrConv(bArr2, vbUnicode)
Else
Line = ""
End If
End Sub