![]() |
Imprimir en cierta posición con el Canvas
Hola...
Necesito realizar una impresión de unos tickets.. en una impresora Laser.. y me gustaria saber como se calcula la posición dentro de un formulario... esto es que debo imprimir en una hoja de tickets 10 por hoja... (2 columnas de 5 filas cada una) :p los datos a imprimir son Nombre ; Ficha ; Valido ; Folio Estoy usando Letra Arial, tamaño 12 :( al usar Canvas.TextOut(650,350,vNom.Text); que equivalencia tienen en milimetros... :confused: |
quizas esta funcion pueda ayudarte
canvas.TextExtent saludos |
El problema es que la función Canvas, maneja Pixels y dependiendo de la impresora, incluso de la configuración de una concreta las posiciones varían, es decir puedes configurar la posición del texto a 10 pixels del márgen izquierdo, pero dependiendo de la longitud de lienzo que tenga la impresora en cuestión luego lo trasladas a otra y las medidas no te servirán.
Explicación está en francés, pero ahora no tengo tiempo de traducirlo, a ver si a la tarde tengo un rato: Cita:
Cita:
|
Que lata...
tenia el informe listo... de la siguiente forma.. para una HP4100 .. y ahora me cambian la impresora a una HP692C.... y sale todo descuadrado..... BeginDoc; Canvas.Font.Size:=12; Canvas.Font.Name:='Arial'; // Imprimo la Primera Fila (2 Columnas ) Canvas.TextOut(0650,750,vNom.Text); Canvas.TextOut(2500,750,vNom.Text); Canvas.TextOut(0650,1000,vFic.Text); Canvas.TextOut(2500,1000,vFic.Text); Canvas.TextOut(2000,1000,'Dic-'+nAnno); Canvas.TextOut(3850,1000,'Dic-'+nAnno); Canvas.TextOut(2050,1250,IntToStr(Cont)); Cont := Cont +1; Canvas.TextOut(3850,1250,IntToStr(Cont)); Cont := Cont +1; // Imprimo la Segunda Fila (2 Columnas ) Canvas.TextOut(0650,1950,vNom.Text); Canvas.TextOut(2500,1950,vNom.Text); Canvas.TextOut(0650,2200,vFic.Text); Canvas.TextOut(2500,2200,vFic.Text); Canvas.TextOut(2000,2200,'Dic-'+nAnno); Canvas.TextOut(3850,2200,'Dic-'+nAnno); Canvas.TextOut(2050,2450,IntToStr(Cont)); Cont := Cont +1; Canvas.TextOut(3850,2450,IntToStr(Cont)); Cont := Cont +1; // Imprimo la Tercera Fila (2 Columnas ) // Imprimo la Cuarta Fila (2 Columnas ) // Imprimo la Quinta Fila (2 Columnas ) EndDoc; Que lata que tenga que pegarme nuevamente la tarea de reprogramar esto... |
Como te decía depende de la impresora en cuestión incluso la misma si se trabaja a mas ó menos resolución te descuadra.
Yo el arreglo que le doy a esta situación es crear un fichero de configuración, una Tabla, ahí guardo el tamaño y tipo de letra a utilizar, y las posiciones, filas y columnas de los distintos campos, un poco tedioso, pero luego desde le programa con una opción en la que se muestran todas estas posiciones bien documentadas, un simple cambio de impresora no te obligará a desplazarte, a no ser que el usurio sea un torpe, que también puede ser, pero en cualquier caso no hay que tocar el codigo para nada. La posición 10, ahora puede que sea 40, otra cosa yo también configuro el salto de línea para poder separar más o menos éstas, también lo guardo en esa tabla. Un Saludo. |
La franja horaria es GMT +2. Ahora son las 12:47:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi