Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

RichTextBox: Leer texto de cierta linea...

Estas en el tema de RichTextBox: Leer texto de cierta linea... en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/05/2006, 05:45
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
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.
  #2 (permalink)  
Antiguo 07/05/2006, 13:11
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
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.
  #3 (permalink)  
Antiguo 11/09/2009, 13:29
 
Fecha de Ingreso: junio-2008
Mensajes: 343
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: RichTextBox: Leer texto de cierta linea...

Hola culd gracias por compartir tu codigo, como recupero el contenido de la linea en una text1
  #4 (permalink)  
Antiguo 11/09/2009, 14:06
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: RichTextBox: Leer texto de cierta linea...

El texto selecionado lo conseguirias con:

Texto=Mid$(R1 , R1.SelStart , R1.SelLength)
  #5 (permalink)  
Antiguo 11/09/2009, 14:40
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
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

Última edición por pkj; 14/09/2009 a las 15:44
  #6 (permalink)  
Antiguo 11/09/2009, 15:00
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
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
  #7 (permalink)  
Antiguo 11/09/2009, 16:36
 
Fecha de Ingreso: junio-2008
Mensajes: 343
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: RichTextBox: Leer texto de cierta linea...

ok pkj gracias por el codigo saludos
  #8 (permalink)  
Antiguo 12/09/2009, 15:38
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
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.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #9 (permalink)  
Antiguo 12/09/2009, 16:10
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: RichTextBox: Leer texto de cierta linea...

Cita:
Iniciado por seba123neo Ver Mensaje
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
  #10 (permalink)  
Antiguo 12/09/2009, 16:33
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: RichTextBox: Leer texto de cierta linea...

upssss, no me di cuenta, hunter18 lo revivio y pensaba que era algo actual.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #11 (permalink)  
Antiguo 12/09/2009, 21:32
 
Fecha de Ingreso: junio-2008
Mensajes: 343
Antigüedad: 15 años, 10 meses
Puntos: 4
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

saludos

Última edición por hunter18; 13/09/2009 a las 14:15
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:00.