|
Página 1 de 1
|
Autor |
Mensaje |
Sebas
Aprendiz
Registrado: Junio 2011
Mensajes: 60
Edad: 61
|
Impresión En Gambas3
Hola a todos.
Estoy intentando reprogramar la impresión en Gambas3 que en este sentido no tiene nada que ver con Gambas2. Hay que hacerlo todo de nuevo.
He conseguido imprimir cuando se trata de una sola página utilizando Printer.Count en el evento Printer_begin() cuando sólo es una página. Pero si es más de una página y además no se sabe cuantas hay que utilizar el evento Printer_Paginate() que es llamado si no se utiliza Printer.Count pero en realidad hace un blucle llamando al evento constantemente sin poder hacer nada más.
¿Alguien ha utilizado esto o sabe como hacerlo?
Gracias
|
#1 Domingo, 04 Septiembre 2011, 07:33 |
|
|
Sebas
Aprendiz
Registrado: Junio 2011
Mensajes: 60
Edad: 61
|
Más Información - Impresión En Gambas3
Quizás no me he explicado bien. Quiero aportar el código que muestre el problema y a la vez es código utilizable para quien quiera imprimir con gambas3.
Public Sub FPrinter_Begin()
Debug "Iniciando impresión"
Paint.Scale(Paint.Width / pPrinter.PaperWidth, Paint.Height / pPrinter.PaperHeight) 'Cooordenadas en milímetros
Debug "paint.width=";; Paint.Width
Debug "paint.height=";; Paint.Height
RMargin = 12
LMargin = pPrinter.PaperWidth - RMargin
TMargin = 10
BMargin = pPrinter.PaperHeight - TMargin
'Estableciendo número de páginas
'El número de páginas sólo se puede establecer una vez en el evento Begin y
'en este caso se dispara el evento Draw de la impresora
'Si no se establece se dispara el evento Paginate pero no sé como manejar
'este evento para ir imprimiento páginas según sea necesario
pPrinter.Count = 2 'La impresora imprime el número de páginas que se establezca en la propiedad Count utilizando para ello el evento Draw
End
Public Sub FPrinter_Draw()
Head 'Impreso en todas las páginas
Detail 'Imprime el resultado de una consulta SQL distribuyéndolo en las páginas necesarias
End
Private Sub Detail()
Dim d As Date
Paint.Font.Name = "Free serif"
Paint.Font.Size = 3.5
Paint.Font.Bold = False
iYPos = 84
Do While resDetalle.Available
If resDetalle["Entregado"] <> d Then
Paint.Font.Bold = True
iYpos += 4
d = resDetalle["Entregado"]
Paint.DrawText("Entregado " & Format(d), RMargin + 3, iYPos)
iYpos += 4
Paint.Font.Bold = False
Endif
Paint.DrawText(resDetalle["Productos.Producto"], rmargin + 3, iYPos)
Paint.DrawText(resDetalle["peso"], 75, iYPos, 5, 0, 1)
Paint.DrawText(resDetalle["extras"], 85, iYPos)
Paint.DrawText(resDetalle["cantidad"], 113, iYPos, 6, 0, 1)
Paint.DrawText(Format(resDetalle["precio"], "0.0000"), 123, iYPos, 12, 0, Align.Right)
Paint.DrawText(resDetalle["IVA"], 153, iYPos, 5, 0, 1)
Paint.DrawText(Format(resDetalle["importe"], "#0.0000"), 173, iYPos, 15, 0, Align.TopRight)
resDetalle.MoveNext
iYPos += 4
If iYPos >= LineResume Then
Exit
Endif
Loop
If pPrinter.Page = pPrinter.Count Then Resume() 'Imprime el resumen sólo en la última página.
'Quizás se puede hacer también con el evento End de la impresora
End
La documentación de gambas3 dice
Event Paginate ( )
This evento is raised so that you can paginate your document in the background.
If you define no event handler, this event will not be raised, and you will have to define the Count propiedad inside the Begin event handler.
Otherwise, if you handle this event, the event handler will be called again and again until you explicitely define the count property.
Si no se define Printer.Count el el evento Begin es llamado el evento Paginate pero no sé que código poner en este dado quje Printer.Count sólo puede ser establecido una vez, no cada vez que necesite una nueva página y Printer.Page es una propiedad de sólo lectura.
Si defino correctamente el número de páginas en el evento Begin la impresión sale bien pero antes de enviar las filas a la impresora ignoro cuantas páginas llevará.
Espero ser claro y si alguien conoce como manejar esto o está interesado en investigarlo conmigo responda. Husmeando en internet parece que nadie más está trabajando en este caso así que abriríamos una vía para otros compañeros que estén interesados en Gambas3.
Gracias
Sebas
|
#2 Jueves, 08 Septiembre 2011, 13:24 |
|
|
Sebas
Aprendiz
Registrado: Junio 2011
Mensajes: 60
Edad: 61
|
Re: Impresión En Gambas3
Bueno, finalmente me respondo a mí mismo.
He estado revisando el modelo de impresión en GTK+. después que encontré un hilo de conversación en que Benöit Misisni indica que el modelo de Gambas3 es igual que en GTK o QT4.
El modelo de impresión de GTK dice lo mismo que la documentación de Gambas3. En resumen la impresión no está disponible hasta que se determina el número de páginas con el objeto de no bloquear el objeto más tiempo del necesario (¿Objeto printer, paint, ...? no lo sé).
Lo cierto es que hay que calcular las páginas antes de empezar en Printer_Begin o en Printer_Paginate realizando las operaciones que sean necesarias para ello.
Sebas
|
#3 Domingo, 11 Septiembre 2011, 09:29 |
|
|
arubioc
Alex
Ingeniero Programador
Registrado: Julio 2011
Mensajes: 248
Edad: 53 Ubicación: Kowloon
|
Re: Impresión En Gambas3
Hola Sebas, estoy migrando de gambas2 a gambas3 y el tema de la impresion es realemente una j*&%$%& , ando detras del tema como 2 semanas y no veo una forma practica de migrar todos los listados de una aplicación.
|
#4 Jueves, 24 May 2012, 18:48 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|