Um die einzelnen Zeilen einer TextBox auszulesen, können Sie den von der
.Text-Eigenschaft gelieferten String nach
vbNewLine durchsuchen und den String an diesen Stellen zerlegen (ab VB6 auch mit der
Split()-Funktion, oder verwenden Sie einer der alternativen Methoden von
vbspeed).
Damit finden Sie jedoch nur die "harten" Zeilenumbrüche, die durch Drücken der Return-Taste vom Benutzer so festgelegt wurden. Wenn Sie auch sehen wollen, an welchen Stellen "weiche" Umbrüche von Windows eingefügt wurden, verwenden Sie die folgenden Methoden:
Public Declare Function SendMessageAsString& Lib "user32" Alias "SendMessageA" _
(ByVal hwnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam As String)
Public Declare Function SendMessageAsLong& Lib "user32" Alias "SendMessageA" _
(ByVal hwnd&, ByVal wMsg&, ByVal wParam&, lParam&)
Public Function GetTextBoxLineCount(ByVal tx As TextBox) As Long
Const EM_GETLINECOUNT = &HBA
If Len(tx.Text) = 0 Then
GetTextBoxLineCount = 0
Else
GetTextBoxLineCount = SendMessageAsLong(tx.hwnd, EM_GETLINECOUNT, 0, 0)
End If
End Function
Public Function GetTextBoxLine(ByVal tx As TextBox, ByVal LineNumber As Long) As String
Dim byteLo As Integer, byteHi As Integer, Buffer As String, l As Long
Const MAX_CHAR_PER_LINE = &H100
Const EM_GETLINE = &HC4
byteLo = MAX_CHAR_PER_LINE And &HFF
byteHi = Int(MAX_CHAR_PER_LINE / &H100)
Buffer = Chr$(byteLo) & Chr$(byteHi) & Space$(MAX_CHAR_PER_LINE - 2)
l = SendMessageAsString(tx.hwnd, EM_GETLINE, LineNumber, Buffer)
GetTextBoxLine = Left$(Buffer, l)
End Function
Anwendungsbeispiel:
Dim i As Long
For i = 0 To GetTextBoxLineCount(Text1) - 1
Debug.Print GetTextBoxLine(Text1, i)
Next