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

Impresión de una celda multilinea

Estas en el tema de Impresión de una celda multilinea en el foro de Visual Basic clásico en Foros del Web. Hola!. He utilizado el código dado por Silvestre para imprimir un mshflexgrid y lo he adaptado a mis necesidades, pues está muy bien, pero cuando ...
  #1 (permalink)  
Antiguo 26/03/2011, 20:17
 
Fecha de Ingreso: abril-2008
Mensajes: 18
Antigüedad: 16 años
Puntos: 0
Pregunta Impresión de una celda multilinea

Hola!. He utilizado el código dado por Silvestre para imprimir un mshflexgrid y lo he adaptado a mis necesidades, pues está muy bien, pero cuando la celda es multilínea imprime la primera línea y el resto las coloca en la parte izquierda de la hoja, fuera del rango de celdas. Aunque llevo varios días intentandolo, no consigo dar con la respuesta correcta. Agradecería me ayuden. Saludos
  #2 (permalink)  
Antiguo 27/03/2011, 06:43
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Impresión de una celda multilinea

Una Forma que yo uso y esta buena, es con esta funcion el cual en "Qcontrol" es un textbox donde pones la cantidad de lineas que queres imprimir

Código vb:
Ver original
  1. Private Sub ImprimirPorLinea(qControl As TextBox)
  2.     Dim i As Long, k As Long
  3.     Dim L1 As Long, L2 As Long
  4.     Const EM_GETLINECOUNT = &HBA
  5.     Const EM_LINEFROMCHAR = &HC9
  6.     Const EM_LINELENGTH = &HC1
  7.     Const EM_LINEINDEX = &HBB
  8.  
  9.     ' Obtenemos el Número de líneas del TextBox
  10.    k = SendMessage(qControl.hwnd, EM_GETLINECOUNT, 0, 0&)
  11.    txtRenglones.text = k
  12.     Printer.Print ""
  13.     For i = k - Val(txtRenglones) To k - 1
  14.         L1 = SendMessage(qControl.hwnd, EM_LINEINDEX, i, 0&) + 1
  15.         L2 = SendMessage(qControl.hwnd, EM_LINELENGTH, L1, 0&)
  16.         Printer.Print Mid$(qControl.text, L1, L2)
  17.     Next
  18.     Printer.EndDoc
  19. End Sub


abrazo
  #3 (permalink)  
Antiguo 27/03/2011, 12:57
 
Fecha de Ingreso: abril-2008
Mensajes: 18
Antigüedad: 16 años
Puntos: 0
Respuesta: Impresión de una celda multilinea

Cita:
Iniciado por gasafonso Ver Mensaje
Una Forma que yo uso y esta buena, es con esta funcion el cual en "Qcontrol" es un textbox donde pones la cantidad de lineas que queres imprimir

Código vb:
Ver original
  1. Private Sub ImprimirPorLinea(qControl As TextBox)
  2.     Dim i As Long, k As Long
  3.     Dim L1 As Long, L2 As Long
  4.     Const EM_GETLINECOUNT = &HBA
  5.     Const EM_LINEFROMCHAR = &HC9
  6.     Const EM_LINELENGTH = &HC1
  7.     Const EM_LINEINDEX = &HBB
  8.  
  9.     ' Obtenemos el Número de líneas del TextBox
  10.    k = SendMessage(qControl.hwnd, EM_GETLINECOUNT, 0, 0&)
  11.    txtRenglones.text = k
  12.     Printer.Print ""
  13.     For i = k - Val(txtRenglones) To k - 1
  14.         L1 = SendMessage(qControl.hwnd, EM_LINEINDEX, i, 0&) + 1
  15.         L2 = SendMessage(qControl.hwnd, EM_LINELENGTH, L1, 0&)
  16.         Printer.Print Mid$(qControl.text, L1, L2)
  17.     Next
  18.     Printer.EndDoc
  19. End Sub


abrazo
Gracias Gasafonso, voy a probarlo. Angeli
  #4 (permalink)  
Antiguo 28/03/2011, 02:58
 
Fecha de Ingreso: abril-2008
Mensajes: 18
Antigüedad: 16 años
Puntos: 0
Respuesta: Impresión de una celda multilinea

He probado el código que me dejaste, y me da error en la línea:
mid$(qControl.text, L1, L2)
Depurándolo el Sendmessage devuelve 0 para L1, y creo que por ello la instrucción mid$ da error. He probado cambiándolo a 1 pero el texto de cada renglón no es correcto.
Te ruego me indiques donde puede estar el fallo. Gracias
  #5 (permalink)  
Antiguo 28/03/2011, 05:46
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Impresión de una celda multilinea

Es que la sub tiene algunos fallos, como incluir un textbox que no existe y luego restando k-val(k) en lugar de poner simplemente 0.
Tambien tienes que tener en cuenta que lo que espera la funcion es un textbox, de modo que si le mandas una celda de una grilla puede no servir.

De todas formas esta función hace lo contrario de lo que tu buscas porque lo que imprime es un textbox tal cual se muestra en la ventana, con tantas lineas como muestre el textbox.

Esta debería ser la sub correcta. Que me corrijan si me equivoco.

Código vb:
Ver original
  1. Private Sub ImprimirPorLinea(qControl As TextBox)
  2.     Dim i As Long, k As Long
  3.     Dim L1 As Long, L2 As Long
  4.     Const EM_GETLINECOUNT = &HBA
  5.     Const EM_LINEFROMCHAR = &HC9
  6.     Const EM_LINELENGTH = &HC1
  7.     Const EM_LINEINDEX = &HBB
  8.  
  9.     ' Obtenemos el Número de líneas del TextBox
  10.    k = SendMessage(qControl.hwnd, EM_GETLINECOUNT, 0, 0&)
  11.     Printer.Print ""
  12.     For i = 0 To k - 1
  13.         L1 = SendMessage(qControl.hwnd, EM_LINEINDEX, i, 0&) + 1
  14.         L2 = SendMessage(qControl.hwnd, EM_LINELENGTH, L1, 0&)
  15.         Printer.Print Mid$(qControl.Text, L1, L2)
  16.     Next
  17.     Printer.EndDoc
  18. End Sub
Se usaría así:
ImprimirPorLinea Text1


Lo que tu necesitarías sería quitar los saltos de línea. Para eso quizá te valga con reemplazar los saltos de línea por espacios:

Suponiendo que tienes el texto a imprimir en una variable llamada Texto, sería:

Printer.print Replace(Texto, vbcrlf, " ")

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 28/03/2011, 10:54
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Impresión de una celda multilinea

Si , perdon se llama

call imprimirporlinea (text1)

y en txtRenglones vos pones la cantidad de renglones que queres imprimir


abrazo

Etiquetas: celda
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 05:13.