Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   RichTextBox: Leer texto de cierta linea... (http://www.forosdelweb.com/f69/richtextbox-leer-texto-cierta-linea-390705/)

culd 04/05/2006 05:45

RichTextBox: Leer texto de cierta linea...
 
Si alguien sabe, como leer el texto de cierta linea, por ejemplo: si tengo 20 lineas y quiero leer solo lo que esta en la linea 10...

Si alguien sabe aporte.

culd 07/05/2006 13:11

No se si nadie no sabe esto, o nadie no quiere ayudar...

Ya solucione mi problema. Como yo no soy mesquino paso un codigo que arme para lo que necesitaba....

PD: VisualBsualdo no robes el codigo para decir que lo hisiste vos...

Código:

Variable = R1.GetLineFromChar(R1.SelStart)
Lo que hace esto, es decirte la linea donde esta el puntero....

Código:

Public Sub ColorearLinea(NumeroLinea As Long)
NumeroLinea = NumeroLinea - 1
Dim Comienzo As Long
Dim Final As Long
Dim Comenzo As Boolean
Dim Termino As Boolean
Dim X As Long

Comenzo = False
Comenzo = False
For X = 0 To Len(R1)
    R1.SelStart = X
    If Comenzo = False Then
        If R1.GetLineFromChar(R1.SelStart) = NumeroLinea Then
            Comienzo = R1.SelStart
            Comenzo = True
        End If
    Else
        If Termino = False Then
            If R1.GetLineFromChar(R1.SelStart) = NumeroLinea + 1 Then
                Final = R1.SelStart
                Termino = True
               
                R1.SelStart = Comienzo
                R1.SelLength = Final - Comienzo
                R1.SelColor = &HFF&
            End If
        End If
    End If
Next X
End Sub

No voy a explicar mucho... Lo que hace es... Mandan el CALL ColorearLinea(Numero de la linea) y listo, lo que hace es buscar la linea y colorearla...

Al que le sirve la sirve al que no le sirve no le sirve.

hunter18 11/09/2009 13:29

Respuesta: RichTextBox: Leer texto de cierta linea...
 
Hola culd gracias por compartir tu codigo, como recupero el contenido de la linea en una text1

pkj 11/09/2009 14:06

Respuesta: RichTextBox: Leer texto de cierta linea...
 
El texto selecionado lo conseguirias con:

Texto=Mid$(R1 , R1.SelStart , R1.SelLength)

pkj 11/09/2009 14:40

Respuesta: RichTextBox: Leer texto de cierta linea...
 
Por otro lado tengo que decir que la sub del compañero culd me cuesta entenderla.

Para mentes más simples como la mía he creado esta sub y le he añadido la ventaja de que no esté limitada al RTBx 'R1', sino que es general y se puede usar con cualquier richtextbox del programa.

Private Sub SeleccionarLinea(ByVal NumeroDeLinea As Double, TextBox As RichTextBox)

¡¡ FUNCION CORREGIDA MÁS ABAJO !!

End Sub

Para usarlo con TextBox en lugar de RichTextBox solo hay que cambiar la declaración:

Private Sub SeleccionarLinea(ByVal NumeroDeLinea As Double, TextBox As TextBox)

Saludos

pkj 11/09/2009 15:00

Respuesta: RichTextBox: Leer texto de cierta linea...
 
Perdonad, no había contado con que la última línea puede no ir seguida de un salto de línea, y mi sub en ese caso no la seleccionaba.

Esta es la versión correcta (espero)

Private Sub SeleccionarLinea(ByVal NumeroDeLinea As Double, TextBox As RichTextBox)
Dim Linea As Double
Dim Posicion As Double
Dim Inicio As Double
Dim Texto As String
Texto = TextBox.Text
If Right$(Texto, 2) <> vbCrLf Then Texto = Texto & vbCrLf
Repite:
Posicion = InStr(Posicion + 1, Texto, vbCrLf)
If Posicion <> 0 Then
Linea = Linea + 1
If Linea < NumeroDeLinea Then
Inicio = Posicion + 1
GoTo Repite
End If
TextBox.SelStart = Inicio
TextBox.SelLength = Posicion - Inicio - 1
End If
End Sub

hunter18 11/09/2009 16:36

Respuesta: RichTextBox: Leer texto de cierta linea...
 
ok pkj gracias por el codigo saludos

seba123neo 12/09/2009 15:38

Respuesta: RichTextBox: Leer texto de cierta linea...
 
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 original
  1. Option Explicit
  2.  
  3. Private Const EM_LINEINDEX = &HBB
  4. Private Const EM_LINELENGTH = &HC1
  5. Private Const EM_GETLINE = &HC4
  6.  
  7. 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
  8. 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
  9.  
  10. Private Sub Command1_Click()
  11.    MsgBox TextoLineaRichTextBox(Richtextbox1, 58)
  12. End Sub
  13.  
  14. Private Sub Form_Load()
  15.    Dim i As Long
  16.    For i = 0 To 100
  17.       Richtextbox1.Text = Richtextbox1.Text & "Linea " & i & vbCrLf
  18.    Next
  19. End Sub
  20.  
  21. Private Function TextoLineaRichTextBox(ByVal pControl As RichTextBox, ByVal pLinea As Long) As String
  22.    Dim vLongitudLinea As Long, vNumeroLinea As Long
  23.    Dim vTemporal As String
  24.    
  25.    TextoLineaRichTextBox = ""
  26.    
  27.    vNumeroLinea = SendMessageLong(pControl.hwnd, EM_LINEINDEX, pLinea, 0&)
  28.    vLongitudLinea = SendMessageLong(pControl.hwnd, EM_LINELENGTH, vNumeroLinea, 0&) + 1
  29.    vTemporal = String$((vLongitudLinea + 2), 0)
  30.    
  31.    Mid$(vTemporal, 1, 1) = Chr$(vLongitudLinea And &HFF)
  32.    Mid$(vTemporal, 2, 1) = Chr$(vLongitudLinea \ &H100)
  33.    
  34.    vLongitudLinea = SendMessageString(pControl.hwnd, EM_GETLINE, pLinea, vTemporal)
  35.    
  36.    If (vLongitudLinea > 0) Then
  37.       TextoLineaRichTextBox = Left$(vTemporal, vLongitudLinea)
  38.    End If
  39. End Function

saludos.

culd 12/09/2009 16:10

Respuesta: RichTextBox: Leer texto de cierta linea...
 
Cita:

Iniciado por seba123neo (Mensaje 3081256)
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 original
  1. Option Explicit
  2.  
  3. Private Const EM_LINEINDEX = &HBB
  4. Private Const EM_LINELENGTH = &HC1
  5. Private Const EM_GETLINE = &HC4
  6.  
  7. 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
  8. 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
  9.  
  10. Private Sub Command1_Click()
  11.    MsgBox TextoLineaRichTextBox(Richtextbox1, 58)
  12. End Sub
  13.  
  14. Private Sub Form_Load()
  15.    Dim i As Long
  16.    For i = 0 To 100
  17.       Richtextbox1.Text = Richtextbox1.Text & "Linea " & i & vbCrLf
  18.    Next
  19. End Sub
  20.  
  21. Private Function TextoLineaRichTextBox(ByVal pControl As RichTextBox, ByVal pLinea As Long) As String
  22.    Dim vLongitudLinea As Long, vNumeroLinea As Long
  23.    Dim vTemporal As String
  24.    
  25.    TextoLineaRichTextBox = ""
  26.    
  27.    vNumeroLinea = SendMessageLong(pControl.hwnd, EM_LINEINDEX, pLinea, 0&)
  28.    vLongitudLinea = SendMessageLong(pControl.hwnd, EM_LINELENGTH, vNumeroLinea, 0&) + 1
  29.    vTemporal = String$((vLongitudLinea + 2), 0)
  30.    
  31.    Mid$(vTemporal, 1, 1) = Chr$(vLongitudLinea And &HFF)
  32.    Mid$(vTemporal, 2, 1) = Chr$(vLongitudLinea \ &H100)
  33.    
  34.    vLongitudLinea = SendMessageString(pControl.hwnd, EM_GETLINE, pLinea, vTemporal)
  35.    
  36.    If (vLongitudLinea > 0) Then
  37.       TextoLineaRichTextBox = Left$(vTemporal, vLongitudLinea)
  38.    End If
  39. End Function

saludos.

Gracias por el dato...

Igualmente es un post del 2006

seba123neo 12/09/2009 16:33

Respuesta: RichTextBox: Leer texto de cierta linea...
 
upssss, no me di cuenta, hunter18 lo revivio :borracho: y pensaba que era algo actual.

hunter18 12/09/2009 21:32

Respuesta: RichTextBox: Leer texto de cierta linea...
 
No importa que haya sido del 2006 ya se agrego mas informacion para los novatos como yo.

Ademas estaba sonambulo y para recuperar el texto solo basta con aplicar .SelText

:golpeado:saludos


La zona horaria es GMT -6. Ahora son las 04:17.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.