Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB4, VB5, VB6 | 23.03.04 |
Die Funktion GetRowContent liefert den Inhalt einer beliebigen Zeile eines RichTextBox-/TextBox-Controls. Wird keine Zeilenummer angegeben, wird der Inhalt der aktuellen Zeile ausgelesen, d.h. der Inhalt der Zeile, in der sich der Eingabecursor befindet.
Option Explicit
' Benötigte API-Deklarationen
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 Const EM_GETLINE = &HC4
Private Const EM_GETSEL = &HB0
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
' Beliebige Zeile eines RTF-/TextBox-Controls auslesen
Private Function GetRowContent(hwnd As Long, _
Optional ByVal nLine As Long = 0) As String
Dim CursorPos As Long
Dim FirstChar As Long
Dim RowLength As Long
Dim Buffer() As Byte
' Falls keine Zeilennummer angegeben,
' Inhalt der aktuellen Zeile ermitteln
If nLine < 1 Then
CursorPos = SendMessage(hwnd, EM_GETSEL, 0, ByVal 0&) \ 65536
nLine = SendMessage(hwnd, EM_LINEFROMCHAR, CursorPos, ByVal 0&)
Else
nLine = nLine - 1
End If
' Zeilenlänge ermitteln
FirstChar = SendMessage(hwnd, EM_LINEINDEX, nLine, ByVal 0&)
RowLength = SendMessage(hwnd, EM_LINELENGTH, FirstChar, ByVal 0&)
' Puffer vorbereiten
ReDim Buffer(RowLength + 1)
Buffer(0) = RowLength + 1
' Zeileninhalt in Puffer auslesen
SendMessage hwnd, EM_GETLINE, nLine, Buffer(0)
' Inhalt als String zurückgeben
GetRowContent = Left$(StrConv(Buffer, vbUnicode), RowLength)
End Function
Aufrufbeispiel:
Dim sLine As String
' Inhalt der aktuellen Zeile
sLine = GetRowContent(RichTextBox1.hWnd)
' Inhalt der 10. Zeile
sLine = GetRowContent(RichTextBox1.hWnd, 10)