• Jueves 25 de Abril de 2024, 17:20

Autor Tema:  Separar Textbox Linea Por Linea  (Leído 12110 veces)

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Separar Textbox Linea Por Linea
« en: Miércoles 23 de Febrero de 2005, 18:14 »
0
hola

miren tengo esta funcin que la uso para separar un texbox multilinea y guardar cada linea por separado que baje de una pagina(no recuerdo cual)

Public Function ImprimirXLinea(qControl As TextBox) As String
    ' Este procedimiento tomará cada línea de un textbox multiline  (23/Ene/00)
    ' y lo imprimirá en la impresora predeterminada
    '
    ' El parámetro qControl, será el TextBox a usar, en este caso no es necesario
    ' ya que sólo tenemos un TextBox, pero si se usaran varios...
    ' sería un procedimiento de uso genérico...
    '
    Dim i As Long, k As Long
    Dim L1 As Long, L2 As Long
    ' Constantes para usar con SendMessage
    Const EM_GETLINECOUNT = &HBA
    Const EM_LINEFROMCHAR = &HC9
    Const EM_LINELENGTH = &HC1

    ' Número de líneas del TextBox
    k = SendMessage(qControl.hWnd, EM_GETLINECOUNT, 0, 0&)

 '   Debug.Print ""
    Dim xTexto As String
    xTexto = emtpy
   
    For i = 0 To k - 1
        ' Primer carácter de la línea actual
       
        L1 = L1 + L2 + SendMessage(qControl.hWnd, EM_LINEINDEX, i, 0&) + IIf(i > 0, 0, 1)
        ' Longitud de la línea actual
        L2 = SendMessage(qControl.hWnd, EM_LINELENGTH, L1, 0&)
        ' Imprimimos el trozo de texto que representa a una línea
       xTexto = xTexto & Mid$(qControl.Text, L1, L2) & "\n"
    Next i
    ImprimirXLinea = xTexto
    ' Le indicamos que ya no hay más que imprimir
End Function

ahora, el problema es que si en el textbox le doy un enter para saltar renglon, al separarlo, hasta antes de donde le d enter sale bien, pero la linea siguiente me la corta y la deja de la longitud de la linea anterior(en la que le di enter)
y los demas caracteres de esa linea me los pone en la siguientre

bueno espero haberme explicado y ojala alguien pueda ayudarme

gracias!

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #1 en: Miércoles 23 de Febrero de 2005, 18:42 »
0
Hola darkasecas!

No te entendi muy bien pero si te sirve de algo este parametro te informa cuando hay salto (enter) vbCrLf
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #2 en: Miércoles 23 de Febrero de 2005, 18:50 »
0
ok a ver si puedo explicarlo mejor con un ejemplo

supongamos que en el textox escribo esto:

blah blah blah(enter)
bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh

la funcion me lo separa asi:

blah blah blah\n
bleh bleh bleh\n
bleh bleh bleh bleh bleh bleh bleh bleh

\n <--es el caracter que uso pa que en la bd separe las lineas

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #3 en: Miércoles 23 de Febrero de 2005, 20:10 »
0
Hola, lo que puedes intentar es poner:
 ImprimirXLinea = Replace(qControl ,vbcrlf,"/n")

Esto lo que hace es sustituir todos los enter(vbvrlf)  del textbox por el separador de líneas "/n".
De esta forma te evitas leer todas las líneas una a una. Claro siempre deben estar separadas la líneas por enter.
Si en la última línea le dan a enter, te pondrá tambien el separador, para eso podrías poner algo así:

 ImprimirXLinea = s = IIf(Right$(qControl, 2) = vbCrLf, Replace(Left$(qControl, Len(qControl) - 2), vbCrLf, "/n"), Replace(qControl, vbCrLf, "/n"))

Hay que probarlo.
PD.: esto me suena a etiquetadoras.

Saludos y suerte.

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #4 en: Miércoles 23 de Febrero de 2005, 20:23 »
0
sip la cosa es qu no necesariamente la linea se termina con un enter, a veces(casi siempre de hecho) se delimita la linea por el tamaño del textbox

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #5 en: Miércoles 23 de Febrero de 2005, 20:43 »
0
por eso he puesto el IIF(...), que controla si hay enter o no.
Y si siempre tiene que acabar con "/n" pues le pones:
    ImprimirXLinea = IIf(Right$(qControl, 2) = vbCrLf, Replace(Left$(qControl, Len(qControl) - 2), vbCrLf, "/n"), Replace(qControl, vbCrLf, "/n")) & "/n"

Si no tiene nada que reemplzar le pondrá el separador al final haya entero no (se supone) - hay que probarlo.
Saludos.

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #6 en: Miércoles 23 de Febrero de 2005, 21:05 »
0
una ultima duda, ese codigo que me das, lo uso en vez de la funcion, o lo pego en alguna parte de la funcion

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #7 en: Jueves 24 de Febrero de 2005, 10:42 »
0
Según está hecho deberías pegarlo dentro de la función, pero inhabilitando todo lo que tiene la función, o renombras esa y creas de nuevo la función con sólo esa línea y a ver que te hace.

Saludos.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #8 en: Jueves 24 de Febrero de 2005, 16:29 »
0
Hola.

Igual no se os ocurrió usar como alternativa la función Split.
Haz una prueba pasando el texto del textbox a esta función para ver cómo funciona:
Código: Text
  1.  
  2. Private Sub Dividir(Byval Texto As String)
  3.    Dim var1 As Variant
  4.    var1 = Split(Texto, vbCrLf)
  5.    Dim i1 As Integer
  6.    For i1 = 0 To Ubound(var1)  
  7.        MsgBox var1(i1)
  8.    Next i1
  9. End Sub
  10.  
  11.  

...Desdee luego que la solución de ebolo es más directa en cuanto ya prepara el texto para ser grabado en la bd (sustituyendo cr + lf por '/n'), pero bueno, por tener en cuenta posibilidades...

Chao.

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #9 en: Jueves 24 de Febrero de 2005, 16:48 »
0
pues no me funcionan esos, tal vez no me estoy explicando bien, pondre otro ejemplo

esto es lo que escribo en el textbox

blah blah blah(enter)
bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh <---hasta aqui llega porque se
blih blih blih blih blih blih                                              acaba el espacio del                textbox    
                                                                                 pero no le doy enter ni nada
                                                                                 (el codigo qeu em dieron
                                                                                  funcionaria si lo hiciera pero
                                                                                  la idea es qe no tenga que  
                                                                                   hacerlo)

me lo deberia separar asi:

blah blah blah\n
bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh\n
blih blih blih blih blih blih\n

pero lo separa asi:

blah blah blah\n
bleh bleh bleh\n
bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh bleh blih blih bl\n

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #10 en: Jueves 24 de Febrero de 2005, 17:21 »
0
Hola.

Prueba con la función así:
Código: Text
  1.  
  2. Public Function ImprimirXLinea(qControl As TextBox) As String
  3.  
  4.     Const EM_GETLINECOUNT = &HBA
  5.     Const EM_LINEINDEX = &HBB
  6.     Const EM_LINELENGTH = &HC1
  7.  
  8.     Dim lLinesCount As Long, lFirstChr As Long, lLineLen As Long
  9.     lLinesCount = SendMessage(qControl.hwnd, EM_GETLINECOUNT, 0&, 0&)
  10.  
  11.     Dim sTextoI As String
  12.     sTextoI = Replace(qControl.Text, vbCrLf, &#34;&#34;)
  13.    
  14.     Dim lIdx As Long, iIni As Integer
  15.     iIni = 1
  16.     For lIdx = 0 To lLinesCount - 1
  17.         lFirstChr = SendMessage(qControl.hwnd, EM_LINEINDEX, lIdx, 0&) + iIni
  18.         lLineLen = SendMessage(qControl.hwnd, EM_LINELENGTH, lFirstChr, 0&)
  19.         ImprimirXLinea = ImprimirXLinea & Left(sTextoI, lLineLen) & &#34;&#092;n&#34;
  20.         sTextoI = Mid(sTextoI, lLineLen + 1)
  21.         iIni = 0
  22.     Next lIdx
  23.  
  24. End Function
  25.  
  26.  

Chao.

darkasecas

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #11 en: Jueves 24 de Febrero de 2005, 18:44 »
0
'chas gracias brroz funcionno perfecto ,me has salvado la vida!!

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #12 en: Jueves 24 de Febrero de 2005, 22:54 »
0
Hola de nuevo.
Brroz una cosilla he probado la función y, si no me he equivocado usándola, el resultado final es el mismo que con el Iif...........,¿no? o hay alguna diferencia que no haya visto, a parte de la "/".
Lo pregunto por aprender siempre cosas nuevas.

Saludos.

Makko

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #13 en: Viernes 25 de Febrero de 2005, 05:21 »
0
Esto tb me sirvio a mi para aprender. Gracias!
Nos vemos gente...!
Saludos.
Saludos.
Makko.

My life is a simple thing that would interest no one. It is a known fact that I was born and that is all that is necessary.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #14 en: Viernes 25 de Febrero de 2005, 13:16 »
0
Verás ebolo...

En un principio yo tampoco me dí cuenta del detalle, pero el 'if' puede fallar porque en un textbox multiline, puede haber líneas que no acaben con retorno de carro y nueva línea: si escribiendo en el textbox llegas al final de la línea, automáticamente sigues escribiendo en la siguiente, y sin haber añadido un cr+lf. Osea, tienes una nueva línea que no podrías localizar ya que el texto no incluye en esa posición el correspondiente salto. De ahí que necesites enviar mensajes al control para obtener el número de líneas y donde empiezan.

Espero haberme explicado bien.

Chao.

ebolo

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Separar Textbox Linea Por Linea
« Respuesta #15 en: Viernes 25 de Febrero de 2005, 20:48 »
0
Entendido.
Graciasssssssssss.
Como siempre te debo una: :food:  &  :beer: .