vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB4, VB5, VB623.03.04
Beliebige Zeile einer (Rich-)TextBox auslesen

Eine Funktion, die den Inhalt einer beliebigen Zeile eines (Rich-)TextBox-Controls ausliest.

Autor:   vb__Bewertung:  Views:  18.567 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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)



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.