TextBoxGetLines - Get an array with individual lines in a TextBox control
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
Const EM_FMTLINES = &HC8
' Return an array with all the lines in the control.
' If the second optional argument is True, the hard CR-LFs are preserved
' (hard CR-LFs are those inserted by the user, soft CRLFs are those inserted
' automatically to wrap long lines)
Function TextBoxGetLines(tb As TextBox, Optional KeepHardLineBreaks As Boolean) _
As String()
Dim result() As String
Dim i As Long
' Activate soft line breaks. A soft line break is marked by the
' CR-Cr-LF sequence.
SendMessage tb.hwnd, EM_FMTLINES, True, ByVal 0&
' Retrieve all the lines in one operation and split results.
' This operation will leave trailing CR character for soft line breaks only.
result() = Split(tb.Text, vbCrLf)
' We need a loop to trim the trailing CR character. If the second
' argument is true, we need to manually add a CR-LF pair to all
' the lines that don't contain such trailing CR char.
For i = 0 To UBound(result)
If Right$(result(i), 1) = vbCr Then
result(i) = Left$(result(i), Len(result(i)) - 1)
ElseIf KeepHardLineBreaks Then
result(i) = result(i) & vbCrLf
End If
Next
' Deactivate soft line breaks.
SendMessage tb.hwnd, EM_FMTLINES, False, ByVal 0&
TextBoxGetLines = result()
End Function