Hola, culd, aca te dejo una funcion con
SendMessage, es la mejor forma creo, aparte es rapidisimo cuando tenes miles de lineas.
Código vb:
Ver originalOption Explicit
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_GETLINE = &HC4
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lPara As Long) As Long
Private Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lPara As String) As Long
Private Sub Command1_Click()
MsgBox TextoLineaRichTextBox(Richtextbox1, 58)
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 0 To 100
Richtextbox1.Text = Richtextbox1.Text & "Linea " & i & vbCrLf
Next
End Sub
Private Function TextoLineaRichTextBox(ByVal pControl As RichTextBox, ByVal pLinea As Long) As String
Dim vLongitudLinea As Long, vNumeroLinea As Long
Dim vTemporal As String
TextoLineaRichTextBox = ""
vNumeroLinea = SendMessageLong(pControl.hwnd, EM_LINEINDEX, pLinea, 0&)
vLongitudLinea = SendMessageLong(pControl.hwnd, EM_LINELENGTH, vNumeroLinea, 0&) + 1
vTemporal = String$((vLongitudLinea + 2), 0)
Mid$(vTemporal, 1, 1) = Chr$(vLongitudLinea And &HFF)
Mid$(vTemporal, 2, 1) = Chr$(vLongitudLinea \ &H100)
vLongitudLinea = SendMessageString(pControl.hwnd, EM_GETLINE, pLinea, vTemporal)
If (vLongitudLinea > 0) Then
TextoLineaRichTextBox = Left$(vTemporal, vLongitudLinea)
End If
End Function
saludos.