In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TPrinter()

Foro público de Xailer en español
Responder
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

TPrinter()

Mensaje por Xevi »

No se si tengo del TODO claro el proceso para imprimir en Xailer.
Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
Creamos un documento, (con la impresora por defecto)
Lo confeccionamos
Lo visualizamos
Seleccionamos la impresora
Lo imprimimos.
Bien, pues en Xailer, no se seguir este proceso "lógico".
Printer:lPreviewModal := .T.
Creamos un documento
Printer:StartDoc()
Printer:oCanvas:nMapMode := mmHIMETRICS
Printer:StartPage()
Lo confeccionamos
Printer:StartPage()
Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer printing demo", CLR_BLUE)
Printer:EndPage()
Lo visualizamos
Por ahora, creo que se necesita de este evento, para clicar en el boton imprimir, sinó no se lanza el documento a la impresora.
Printer:Preview()
Seleccionamos la impresora
¿Cómo hago este proceso???
Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero aunque le de Aceptar, no me imprime NADA.
Si no llamo a Printer:Preview(), no se imprime el documento.
Printer:Preview() no dispone de un botón seleccionar impresora.
Lo imprimimos.
¿Y este otro proceso???
¿Y si no quiero visualizar el Preview???
Faltarí­a un Evento Printer:Print(), para cuando necesitáramos lanzar el documento a la impresora seleccionada al Aceptar en el diálogo de Impresoras.
Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora, incluso antes de crear el documento
Printer:Run()
Pero ¿no es mas lógico poder crear el documento, con la impresora por defecto, y poderlo visualizar e imprimir en cualquier impresora instalada en Windows???
Si primero tengo que seleccionar la impresora,... eso quiere decir que cada vez que cambie de impresora, debo "reconstruir" el documento, de ser así­ ¿algun evento que "reconstruya" el documento al cambiar de impresora de salida del documento???
¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras, simplemente contruir un documento e imprimirlo a la impresora por defecto...?
Estas son mis dudas en el tema de impresión. Hasta hoy parecí­a que lo tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas tengo.
Gracias.
Un Saludo,
Xevi.
--
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

TPrinter()

Mensaje por jasm.nospam »

oFont := TFont():New()
WITH OBJECT oFont
:cName := "Courier New"
:nSize := 10
:lBold := .F.
END WITH
Printer:lPreview := AppData:lPrev
Printer:cJobTitle := "Ticket de caja"
Printer:StartDoc()
Printer:oCanvas:nMapMode := mmHIMETRICS //Selecciono medidas en sistema metrico.
//Las unidades son milímetros * 10
Printer:StartPage()
nLin := Printer:PhysicalOffset()[2]
nIzq := Printer:PhysicalOffset()[1]
WITH OBJECT Printer:oCanvas
nPaso := ( :TextHeight( "." ) / Printer:Resolution()[2] * 254 )
FOR nI := 1 TO 6
cI := Alltrim( Str( nI ) )
IF !Empty( AppData:cCab&cI )
:nTextAlignment := taLEFT
:TextOut( nIzq, nLin, PadC( AppData:cCab&cI, 40 ) )
nLin += nPaso
END IF
NEXT
nLin += ( nPaso * 2 )
cLinea := "Ticket Nº: " + PadR( Alltrim( Str( nTicket ) ), 7 ) + " " + ;
"Fecha: " + dtoc( AppData:dFecha )
:TextOut( nIzq, nLin, cLinea )
nLin += ( nPaso * 2 )
cLinea := "Articulo Can Precio Importe "
:TextOut( nIzq, nLin, cLinea )
nLin += nPaso
cLinea := "------------------- --- ------ ---------"
:TextOut( nIzq, nLin, cLinea )
nLin += nPaso
FOR nI := 1 TO ::oDet:nFilas
cLinea := Left( ::oDet:aRes[ nI, 4 ], 19 ) + " " + ;
Str( ::oDet:aRes[ nI, 1 ], 3, 0 ) + " " + ;
Transform( ::oDet:aRes[ nI, 2 ], "@ZE 999.99" ) + " " + ;
Transform( ::oDet:aRes[ nI, 3 ], "@ZE 99,999.99" )
nTotal += ::oDet:aRes[ nI, 3 ]
:TextOut( nIzq, nLin, cLinea )
nLin += nPaso
NEXT
cLinea := " ---------"
:TextOut( nIzq, nLin, cLinea )
nLin += nPaso
cLinea := " Total ..... " + Transform( nTotal, "@ZE 99,999.99" )
:TextOut( nIzq, nLin, cLinea )
nLin += nPaso
cLinea := " ========="
:TextOut( nIzq, nLin, cLinea )
nLin += ( nPaso * 2 )
FOR nI := 1 TO 6
cI := Alltrim( Str( nI ) )
IF !Empty( AppData:cPie&cI )
:TextOut( nIzq, nLin, PadC( AppData:cPie&cI, 40 ) )
nLin += nPaso
END IF
NEXT
END WITH
Printer:EndPage()
Printer:EndDoc()
Printer:Preview( AppData:lPrev )
oFont:Destroy()
--
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

TPrinter()

Mensaje por Xevi »

Resolviendo alguna de las dudas...
>> Por ahora, creo que se necesita de este evento, para clicar en el boton imprimir, sinó no se lanza el documento a la impresora.
Pues no, simplemente estableciendo Printer:lPreview a verdadero, FUERZA el Preview, a falso enví­a el documento DIRECTAMENTE a la impresora por defecto.
Ahora bien, me sigue quedando la duda de si quiero CAMBIAR DE IMPRESORA del PReview de la impresora por defecto a la que finalmente quiera enviar el documento.
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
No se si tengo del TODO claro el proceso para imprimir en Xailer.
Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
Creamos un documento, (con la impresora por defecto)
Lo confeccionamos
Lo visualizamos
Seleccionamos la impresora
Lo imprimimos.
Bien, pues en Xailer, no se seguir este proceso "lógico".
Printer:lPreviewModal := .T.
Creamos un documento
Printer:StartDoc()
Printer:oCanvas:nMapMode := mmHIMETRICS
Printer:StartPage()
Lo confeccionamos
Printer:StartPage()
Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer printing demo", CLR_BLUE)
Printer:EndPage()
Lo visualizamos
Por ahora, creo que se necesita de este evento, para clicar en el boton imprimir, sinó no se lanza el documento a la impresora.
Printer:Preview()
Seleccionamos la impresora
¿Cómo hago este proceso???
Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero aunque le de Aceptar, no me imprime NADA.
Si no llamo a Printer:Preview(), no se imprime el documento.
Printer:Preview() no dispone de un botón seleccionar impresora.
Lo imprimimos.
¿Y este otro proceso???
¿Y si no quiero visualizar el Preview???
Faltarí­a un Evento Printer:Print(), para cuando necesitáramos lanzar el documento a la impresora seleccionada al Aceptar en el diálogo de Impresoras.
Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora, incluso antes de crear el documento
Printer:Run()
Pero ¿no es mas lógico poder crear el documento, con la impresora por defecto, y poderlo visualizar e imprimir en cualquier impresora instalada en Windows???
Si primero tengo que seleccionar la impresora,... eso quiere decir que cada vez que cambie de impresora, debo "reconstruir" el documento, de ser así­ ¿algun evento que "reconstruya" el documento al cambiar de impresora de salida del documento???
¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras, simplemente contruir un documento e imprimirlo a la impresora por defecto...?
Estas son mis dudas en el tema de impresión. Hasta hoy parecí­a que lo tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas tengo.
Gracias.
Un Saludo,
Xevi.
--
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

TPrinter()

Mensaje por Xevi »

José Alfonso,
Gracias.
Alguna cosa siempre se "pilla"... aunque la duda de "cambiar" de impresora
de salida... uuuhhhmmmm
¿Espero que se implemente el botón de seleccionar impresora???
¿Algun método TPrinter:Refresh(), para cuando se cambie de impresora de
salida???
Un Saludo,
Xevi.
"Jose Alfonso Suárez Moreno" <jasm.nospam@chochurro.com> escribió en el
mensaje news:43476e9d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> Aqui llevas un ejemplo de un documento hecho con TCanvas.
>
> Saludos
>
> Jose A. Suarez
>
> Xevi escribió:
>> No se si tengo del TODO claro el proceso para imprimir en Xailer.
>>
>> Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
>>
>> *Creamos un documento,* (con la impresora por defecto)
>> *Lo confeccionamos*
>> *Lo visualizamos*
>> *Seleccionamos la impresora*
>> *Lo imprimimos.*
>>
>>
>> Bien, pues en Xailer, no se seguir este proceso "lógico".
>>
>> Printer:lPreviewModal := .T.
>> *Creamos un documento*
>> Printer:StartDoc()
>> Printer:oCanvas:nMapMode := mmHIMETRICS
>> Printer:StartPage()
>> *Lo confeccionamos*
>> Printer:StartPage()
>> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000,
>> "Xailer printing demo", CLR_BLUE)
>> Printer:EndPage()
>> *Lo visualizamos*
>> Por ahora, creo que se necesita de este evento, para clicar en el
>> boton imprimir, sinó no se lanza el documento a la impresora.
>> Printer:Preview()
>> *Seleccionamos la impresora*
>> ¿Cómo hago este proceso???
>> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero
>> aunque le de Aceptar, no me imprime NADA.
>> Si no llamo a Printer:Preview(), no se imprime el documento.
>> Printer:Preview() no dispone de un botón seleccionar impresora.
>> *Lo imprimimos.*
>> ¿Y este otro proceso???
>> ¿Y si no quiero visualizar el Preview???
>> Faltaría un Evento Printer:Print(), para cuando necesitáramos lanzar
>> el documento a la impresora seleccionada al Aceptar en el diálogo de
>> Impresoras.
>>
>>
>>
>>
>> Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora,
>> incluso antes de crear el documento
>> Printer:Run()
>>
>> Pero ¿no es mas lógico poder crear el documento, con la impresora por
>> defecto, y poderlo visualizar e imprimir en cualquier impresora
>> instalada en Windows???
>> Si primero tengo que seleccionar la impresora,... eso quiere decir que
>> cada vez que cambie de impresora, debo "reconstruir" el documento, de
>> ser así ¿algun evento que "reconstruya" el documento al cambiar de
>> impresora de salida del documento???
>> ¿Como lanzo el documento sin visualizar Preview ni diálogo de
>> impresoras, simplemente contruir un documento e imprimirlo a la
>> impresora por defecto...?
>>
>>
>> Estas son mis dudas en el tema de impresión. Hasta hoy parecía que lo
>> tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas
>> tengo.
>>
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>
------------------------------------------------------------ --------------------
> oFont := TFont():New()
>
> WITH OBJECT oFont
> :cName := "Courier New"
> :nSize := 10
> :lBold := .F.
> END WITH
>
> Printer:lPreview := AppData:lPrev
> Printer:cJobTitle := "Ticket de caja"
> Printer:StartDoc()
> Printer:oCanvas:nMapMode := mmHIMETRICS //Selecciono medidas
> en sistema metrico.
> //Las unidades son
> milímetros * 10
>
> Printer:StartPage()
>
> nLin := Printer:PhysicalOffset()[2]
> nIzq := Printer:PhysicalOffset()[1]
>
> WITH OBJECT Printer:oCanvas
> nPaso := ( :TextHeight( "." ) / Printer:Resolution()[2] * 254 )
>
> FOR nI := 1 TO 6
> cI := Alltrim( Str( nI ) )
> IF !Empty( AppData:cCab&cI )
> :nTextAlignment := taLEFT
> :TextOut( nIzq, nLin, PadC( AppData:cCab&cI, 40 ) )
> nLin += nPaso
> END IF
> NEXT
>
> nLin += ( nPaso * 2 )
> cLinea := "Ticket Nº: " + PadR( Alltrim( Str( nTicket ) ), 7 )
> + " " + ;
> "Fecha: " + dtoc( AppData:dFecha )
> :TextOut( nIzq, nLin, cLinea )
> nLin += ( nPaso * 2 )
>
> cLinea := "Articulo Can Precio Importe "
> :TextOut( nIzq, nLin, cLinea )
> nLin += nPaso
> cLinea := "------------------- --- ------ ---------"
> :TextOut( nIzq, nLin, cLinea )
> nLin += nPaso
>
> FOR nI := 1 TO ::oDet:nFilas
>
> cLinea := Left( ::oDet:aRes[ nI, 4 ], 19 ) + " " + ;
> Str( ::oDet:aRes[ nI, 1 ], 3, 0 ) + " " + ;
> Transform( ::oDet:aRes[ nI, 2 ], "@ZE 999.99" ) +
> " " + ;
> Transform( ::oDet:aRes[ nI, 3 ], "@ZE 99,999.99" )
> nTotal += ::oDet:aRes[ nI, 3 ]
> :TextOut( nIzq, nLin, cLinea )
> nLin += nPaso
> NEXT
>
> cLinea := " ---------"
> :TextOut( nIzq, nLin, cLinea )
> nLin += nPaso
> cLinea := " Total ..... " + Transform(
> nTotal, "@ZE 99,999.99" )
> :TextOut( nIzq, nLin, cLinea )
> nLin += nPaso
> cLinea := " ========="
> :TextOut( nIzq, nLin, cLinea )
> nLin += ( nPaso * 2 )
>
> FOR nI := 1 TO 6
> cI := Alltrim( Str( nI ) )
> IF !Empty( AppData:cPie&cI )
> :TextOut( nIzq, nLin, PadC( AppData:cPie&cI, 40 ) )
> nLin += nPaso
> END IF
> NEXT
>
> END WITH
>
> Printer:EndPage()
> Printer:EndDoc()
> Printer:Preview( AppData:lPrev )
> oFont:Destroy()
>
>
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

TPrinter()

Mensaje por jasm.nospam »

Xevi,
Cambiar la impresora desde el preview no se si podra hacerse. Si te
fijas todos los parámetros para calcular posiciones en el documentos los
coge de la impresora activa antes de ejecutar el preview.
Creo que hay una forma de seleccionar la impresora antes de hacer el
documento, pero hay que crear un objeto printer espací­fico para esa
impresora.
Saludos
Jose A. Suarez
Xevi escribió:
> Resolviendo alguna de las dudas...
>
> >> Por ahora, creo que se necesita de este evento, para clicar en el
> boton imprimir, sinó no se lanza el documento a la impresora.
>
> Pues no, simplemente estableciendo Printer:lPreview a verdadero, FUERZA
> el Preview, a falso enví­a el documento DIRECTAMENTE a la impresora por
> defecto.
>
> Ahora bien, me sigue quedando la duda de si quiero CAMBIAR DE IMPRESORA
> del PReview de la impresora por defecto a la que finalmente quiera
> enviar el documento.
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
>
>
>
> "Xevi" <xevicomas@terra.es <mailto:xevicomas@terra.es>> escribió en
> el mensaje news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> No se si tengo del TODO claro el proceso para imprimir en Xailer.
>
> Hasta ahora, en otra GUI, y en cualquier proceso de impresión de
> Windows,
>
> *Creamos un documento,* (con la impresora por defecto)
> *Lo confeccionamos*
> *Lo visualizamos*
> *Seleccionamos la impresora*
> *Lo imprimimos.*
>
>
> Bien, pues en Xailer, no se seguir este proceso "lógico".
>
> Printer:lPreviewModal := .T.
> *Creamos un documento*
> Printer:StartDoc()
> Printer:oCanvas:nMapMode := mmHIMETRICS
> Printer:StartPage()
> *Lo confeccionamos*
> Printer:StartPage()
> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000,
> "Xailer printing demo", CLR_BLUE)
> Printer:EndPage()
> *Lo visualizamos*
> Por ahora, creo que se necesita de este evento, para clicar en
> el boton imprimir, sinó no se lanza el documento a la impresora.
> Printer:Preview()
> *Seleccionamos la impresora*
> ¿Cómo hago este proceso???
> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras,
> pero aunque le de Aceptar, no me imprime NADA.
> Si no llamo a Printer:Preview(), no se imprime el documento.
> Printer:Preview() no dispone de un botón seleccionar impresora.
> *Lo imprimimos.*
> ¿Y este otro proceso???
> ¿Y si no quiero visualizar el Preview???
> Faltarí­a un Evento Printer:Print(), para cuando necesitáramos
> lanzar el documento a la impresora seleccionada al Aceptar en el
> diálogo de Impresoras.
>
>
>
>
> Por lo que se hasta ahora, antes de nada, debo seleccionar la
> impresora, incluso antes de crear el documento
> Printer:Run()
>
> Pero ¿no es mas lógico poder crear el documento, con la impresora
> por defecto, y poderlo visualizar e imprimir en cualquier impresora
> instalada en Windows???
> Si primero tengo que seleccionar la impresora,... eso quiere decir
> que cada vez que cambie de impresora, debo "reconstruir" el
> documento, de ser así­ ¿algun evento que "reconstruya" el documento
> al cambiar de impresora de salida del documento???
> ¿Como lanzo el documento sin visualizar Preview ni diálogo de
> impresoras, simplemente contruir un documento e imprimirlo a la
> impresora por defecto...?
>
>
> Estas son mis dudas en el tema de impresión. Hasta hoy parecí­a que
> lo tenia bastante claro, pero ya veis que cuando mas avanzo, mas
> dudas tengo.
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

TPrinter()

Mensaje por jfgimenez »

Xevi,
Ahora bien, me sigue quedando la duda de si quiero CAMBIAR DE IMPRESORA del PReview de la impresora por defecto a la que finalmente quiera enviar el documento.
Como comenta José Alfonso, todos los parámetros de impresión se toman de la impresora seleccionada al comenzar la impresión. Más concretamente, cuando se imprime usando el preview, se está generando un EMF por cada página, y esos EMF están basados en un HDC correspondiente a la impresora seleccionada.
No obstante, al ser los EMF escalables, es muy posible que se pueda hacer lo que quieres, y podamos forzar la impresión de esos EMF en otro HDC. La única duda que me queda es qué pasará con las imágenes. Bueno, veremos qué podemos hacer.
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Guest

TPrinter()

Mensaje por Guest »

José Alfonso,
No, no hace falta, tan sólo hay que cambiar nPrinterIndex al numero de
impresora que desees dentro del rango marcado por aPrinterNames.
Un saludo,
"Jose Alfonso Suárez Moreno" <jasm.nospam@chochurro.com> escribió en el
mensaje news:[email=434785f7@ozsrvnegro.ozlan.local...]434785f7@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> Cambiar la impresora desde el preview no se si podra hacerse. Si te fijas
> todos los parámetros para calcular posiciones en el documentos los coge de
> la impresora activa antes de ejecutar el preview.
>
> Creo que hay una forma de seleccionar la impresora antes de hacer el
> documento, pero hay que crear un objeto printer espacífico para esa
> impresora.
>
> Saludos
>
> Jose A. Suarez
>
> Xevi escribió:
>> Resolviendo alguna de las dudas...
>> >> Por ahora, creo que se necesita de este evento, para clicar en el
>> boton imprimir, sinó no se lanza el documento a la impresora.
>> Pues no, simplemente estableciendo Printer:lPreview a verdadero, FUERZA
>> el Preview, a falso envía el documento DIRECTAMENTE a la impresora por
>> defecto.
>> Ahora bien, me sigue quedando la duda de si quiero CAMBIAR DE IMPRESORA
>> del PReview de la impresora por defecto a la que finalmente quiera enviar
>> el documento.
>> Gracias.
>> Un Saludo,
>> Xevi.
>>
>> "Xevi" <xevicomas@terra.es <mailto:xevicomas@terra.es>> escribió en
>> el mensaje news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> No se si tengo del TODO claro el proceso para imprimir en Xailer.
>> Hasta ahora, en otra GUI, y en cualquier proceso de impresión de
>> Windows,
>> *Creamos un documento,* (con la impresora por defecto)
>> *Lo confeccionamos*
>> *Lo visualizamos*
>> *Seleccionamos la impresora*
>> *Lo imprimimos.*
>> Bien, pues en Xailer, no se seguir este proceso "lógico".
>> Printer:lPreviewModal := .T.
>> *Creamos un documento*
>> Printer:StartDoc()
>> Printer:oCanvas:nMapMode := mmHIMETRICS
>> Printer:StartPage()
>> *Lo confeccionamos*
>> Printer:StartPage()
>> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000,
>> "Xailer printing demo", CLR_BLUE)
>> Printer:EndPage()
>> *Lo visualizamos*
>> Por ahora, creo que se necesita de este evento, para clicar en
>> el boton imprimir, sinó no se lanza el documento a la impresora.
>> Printer:Preview()
>> *Seleccionamos la impresora*
>> ¿Cómo hago este proceso???
>> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras,
>> pero aunque le de Aceptar, no me imprime NADA.
>> Si no llamo a Printer:Preview(), no se imprime el documento.
>> Printer:Preview() no dispone de un botón seleccionar impresora.
>> *Lo imprimimos.*
>> ¿Y este otro proceso???
>> ¿Y si no quiero visualizar el Preview???
>> Faltaría un Evento Printer:Print(), para cuando necesitáramos
>> lanzar el documento a la impresora seleccionada al Aceptar en el
>> diálogo de Impresoras.
>> Por lo que se hasta ahora, antes de nada, debo seleccionar la
>> impresora, incluso antes de crear el documento
>> Printer:Run()
>> Pero ¿no es mas lógico poder crear el documento, con la impresora
>> por defecto, y poderlo visualizar e imprimir en cualquier impresora
>> instalada en Windows???
>> Si primero tengo que seleccionar la impresora,... eso quiere decir
>> que cada vez que cambie de impresora, debo "reconstruir" el
>> documento, de ser así ¿algun evento que "reconstruya" el documento
>> al cambiar de impresora de salida del documento???
>> ¿Como lanzo el documento sin visualizar Preview ni diálogo de
>> impresoras, simplemente contruir un documento e imprimirlo a la
>> impresora por defecto...?
>> Estas son mis dudas en el tema de impresión. Hasta hoy parecía que
>> lo tenia bastante claro, pero ya veis que cuando mas avanzo, mas
>> dudas tengo.
>> Gracias.
>> Un Saludo,
>> Xevi.
>>
Guest

TPrinter()

Mensaje por Guest »

Xevi,
No se cual es el otro GUI, pero si empieza por 'F' creo que estas equivocado
y supongo que con cualquier otro entorno te pasara lo mismo. Es
absolutamente necesario indicar la impresora sobre la que se va a imprimir
antes de confeccionar el documento. El propio API de Windows exige un
dispostivo de contexto creado para la impresora sobre la cual se desea
imprimir para poder siquiera empezar el documento, por lo tanto la secuencia
es la siguiente
SELECCION DE LA IMPRESORA
Creación del documento
Impresión del mismo
Es completamente imposible hacer lo que dices, por la sencilla razón que
cada impresora tiene resoluciones distintas, e incluso en una misma
impresora se pueden seleccionar distintas resoluciones. Para que lo
entiendas la hoja de papel sobre la que se imprime es dintinta en cada caso.
Los fonts se tienen que dimensionar con respecto a la resolución de la
impresora por ejemplo.
La única forma de hacerlo sería, a mi modo de ver, la chapuza de imprimir
siempre en base a una resolución en milimetros por ejemplo y no en pixeles y
decirle a Windows que utilice un modo anisotrópico y te aseguro que queda
fatal en impresoras con mucha resolución, se nota la pixelización
tremendamente.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
No se si tengo del TODO claro el proceso para imprimir en Xailer.
Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
Creamos un documento, (con la impresora por defecto)
Lo confeccionamos
Lo visualizamos
Seleccionamos la impresora
Lo imprimimos.
Bien, pues en Xailer, no se seguir este proceso "lógico".
Printer:lPreviewModal := .T.
Creamos un documento
Printer:StartDoc()
Printer:oCanvas:nMapMode := mmHIMETRICS
Printer:StartPage()
Lo confeccionamos
Printer:StartPage()
Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer
printing demo", CLR_BLUE)
Printer:EndPage()
Lo visualizamos
Por ahora, creo que se necesita de este evento, para clicar en el boton
imprimir, sinó no se lanza el documento a la impresora.
Printer:Preview()
Seleccionamos la impresora
¿Cómo hago este proceso???
Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero aunque
le de Aceptar, no me imprime NADA.
Si no llamo a Printer:Preview(), no se imprime el documento.
Printer:Preview() no dispone de un botón seleccionar impresora.
Lo imprimimos.
¿Y este otro proceso???
¿Y si no quiero visualizar el Preview???
Faltaría un Evento Printer:Print(), para cuando necesitáramos lanzar el
documento a la impresora seleccionada al Aceptar en el diálogo de
Impresoras.
Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora,
incluso antes de crear el documento
Printer:Run()
Pero ¿no es mas lógico poder crear el documento, con la impresora por
defecto, y poderlo visualizar e imprimir en cualquier impresora instalada en
Windows???
Si primero tengo que seleccionar la impresora,... eso quiere decir que cada
vez que cambie de impresora, debo "reconstruir" el documento, de ser así
¿algun evento que "reconstruya" el documento al cambiar de impresora de
salida del documento???
¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras,
simplemente contruir un documento e imprimirlo a la impresora por
defecto...?
Estas son mis dudas en el tema de impresión. Hasta hoy parecía que lo tenia
bastante claro, pero ya veis que cuando mas avanzo, mas dudas tengo.
Gracias.
Un Saludo,
Xevi.
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

TPrinter()

Mensaje por Xevi »

Ignacio,
> No se cual es el otro GUI, pero si empieza por 'F' creo que estas
> equivocado
Desconozco "Fx", nunca me gustó, en mi opinión, le vi como un "parche" a
Clipper...
En "Cx" pues si que dispone de un Evento Printer:Print() que es quien lanza
el documento que hemos "confeccionado" con la impresora por defecto, a la
impresora que seleccionemos con el diálogo de Impresoras Windows...
De hecho, cuando creamos un documento con Word, lo estamos "confeccionando"
con la impresora por defecto o la que seleccionemos en el menu Archivo
Impresora.
Luego, si clicamos al botón de impresora, lo "lanza" a la impresora que
tenemos seleccionada, o podemos ir al menu Abrir Imprimir, y se lanza el
diálogo de impresoras, para escojer la impresora que realmente imprimirá el
documento.
Internamente, desconozco el funcionamiento, supongo que hace un Refresh()
del documento en memoria, a la impresora escojida, pero al fin y al cabo es
lo que un usuario pretende, confeccionar un documento, y lanzarlo a al
impresora escojida...
No creo que esté diciendo una barbaridad, sinó que es algo bastante lógico
¿no creeis???
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz" <Noname@ozs.com> escribió en el mensaje
news:[email=4347aade@ozsrvnegro.ozlan.local...]4347aade@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> No se cual es el otro GUI, pero si empieza por 'F' creo que estas
> equivocado y supongo que con cualquier otro entorno te pasara lo mismo. Es
> absolutamente necesario indicar la impresora sobre la que se va a imprimir
> antes de confeccionar el documento. El propio API de Windows exige un
> dispostivo de contexto creado para la impresora sobre la cual se desea
> imprimir para poder siquiera empezar el documento, por lo tanto la
> secuencia es la siguiente
>
> SELECCION DE LA IMPRESORA
> Creación del documento
> Impresión del mismo
>
> Es completamente imposible hacer lo que dices, por la sencilla razón que
> cada impresora tiene resoluciones distintas, e incluso en una misma
> impresora se pueden seleccionar distintas resoluciones. Para que lo
> entiendas la hoja de papel sobre la que se imprime es dintinta en cada
> caso. Los fonts se tienen que dimensionar con respecto a la resolución de
> la impresora por ejemplo.
>
> La única forma de hacerlo sería, a mi modo de ver, la chapuza de imprimir
> siempre en base a una resolución en milimetros por ejemplo y no en pixeles
> y decirle a Windows que utilice un modo anisotrópico y te aseguro que
> queda fatal en impresoras con mucha resolución, se nota la pixelización
> tremendamente.
>
> Un saludo,
>
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> No se si tengo del TODO claro el proceso para imprimir en Xailer.
>
> Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
>
> Creamos un documento, (con la impresora por defecto)
> Lo confeccionamos
> Lo visualizamos
> Seleccionamos la impresora
> Lo imprimimos.
>
>
> Bien, pues en Xailer, no se seguir este proceso "lógico".
>
> Printer:lPreviewModal := .T.
> Creamos un documento
> Printer:StartDoc()
> Printer:oCanvas:nMapMode := mmHIMETRICS
> Printer:StartPage()
> Lo confeccionamos
> Printer:StartPage()
> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer
> printing demo", CLR_BLUE)
> Printer:EndPage()
> Lo visualizamos
> Por ahora, creo que se necesita de este evento, para clicar en el boton
> imprimir, sinó no se lanza el documento a la impresora.
> Printer:Preview()
> Seleccionamos la impresora
> ¿Cómo hago este proceso???
> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero
> aunque le de Aceptar, no me imprime NADA.
> Si no llamo a Printer:Preview(), no se imprime el documento.
> Printer:Preview() no dispone de un botón seleccionar impresora.
> Lo imprimimos.
> ¿Y este otro proceso???
> ¿Y si no quiero visualizar el Preview???
> Faltaría un Evento Printer:Print(), para cuando necesitáramos lanzar el
> documento a la impresora seleccionada al Aceptar en el diálogo de
> Impresoras.
>
>
>
>
> Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora,
> incluso antes de crear el documento
> Printer:Run()
>
> Pero ¿no es mas lógico poder crear el documento, con la impresora por
> defecto, y poderlo visualizar e imprimir en cualquier impresora instalada
> en Windows???
> Si primero tengo que seleccionar la impresora,... eso quiere decir que
> cada vez que cambie de impresora, debo "reconstruir" el documento, de ser
> así ¿algun evento que "reconstruya" el documento al cambiar de impresora
> de salida del documento???
> ¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras,
> simplemente contruir un documento e imprimirlo a la impresora por
> defecto...?
>
>
> Estas son mis dudas en el tema de impresión. Hasta hoy parecía que lo
> tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas tengo.
>
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

TPrinter()

Mensaje por jasm.nospam »

Xevi,
En WordPerfect (como en otros procesadores) se confecciona el documento
en la impresora por defecto. Después, a la hora de imprimir, puedes
seleccionar otra impresora, internamente el programa intentará ajustar
el documento al cambio de selección, pero el resultado muchas veces no
se parece en nada a lo que habí­as previsto.
Saludos
Jose A. Suarez
Xevi escribió:
>
> Ignacio,
>
>
>>No se cual es el otro GUI, pero si empieza por 'F' creo que estas
>>equivocado
>
> Desconozco "Fx", nunca me gustó, en mi opinión, le vi como un "parche" a
> Clipper...
> En "Cx" pues si que dispone de un Evento Printer:Print() que es quien lanza
> el documento que hemos "confeccionado" con la impresora por defecto, a la
> impresora que seleccionemos con el diálogo de Impresoras Windows...
>
>
> De hecho, cuando creamos un documento con Word, lo estamos "confeccionando"
> con la impresora por defecto o la que seleccionemos en el menu Archivo
> Impresora.
> Luego, si clicamos al botón de impresora, lo "lanza" a la impresora que
> tenemos seleccionada, o podemos ir al menu Abrir Imprimir, y se lanza el
> diálogo de impresoras, para escojer la impresora que realmente imprimirá el
> documento.
> Internamente, desconozco el funcionamiento, supongo que hace un Refresh()
> del documento en memoria, a la impresora escojida, pero al fin y al cabo es
> lo que un usuario pretende, confeccionar un documento, y lanzarlo a al
> impresora escojida...
>
> No creo que esté diciendo una barbaridad, sinó que es algo bastante lógico
> ¿no creeis???
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz" <Noname@ozs.com> escribió en el mensaje
> news:[email=4347aade@ozsrvnegro.ozlan.local...]4347aade@ozsrvnegro.ozlan.local...[/email]
>
>>Xevi,
>>
>>No se cual es el otro GUI, pero si empieza por 'F' creo que estas
>>equivocado y supongo que con cualquier otro entorno te pasara lo mismo. Es
>>absolutamente necesario indicar la impresora sobre la que se va a imprimir
>>antes de confeccionar el documento. El propio API de Windows exige un
>>dispostivo de contexto creado para la impresora sobre la cual se desea
>>imprimir para poder siquiera empezar el documento, por lo tanto la
>>secuencia es la siguiente
>>
>>SELECCION DE LA IMPRESORA
>>Creación del documento
>>Impresión del mismo
>>
>>Es completamente imposible hacer lo que dices, por la sencilla razón que
>>cada impresora tiene resoluciones distintas, e incluso en una misma
>>impresora se pueden seleccionar distintas resoluciones. Para que lo
>>entiendas la hoja de papel sobre la que se imprime es dintinta en cada
>>caso. Los fonts se tienen que dimensionar con respecto a la resolución de
>>la impresora por ejemplo.
>>
>>La única forma de hacerlo serí­a, a mi modo de ver, la chapuza de imprimir
>>siempre en base a una resolución en milimetros por ejemplo y no en pixeles
>>y decirle a Windows que utilice un modo anisotrópico y te aseguro que
>>queda fatal en impresoras con mucha resolución, se nota la pixelización
>>tremendamente.
>>
>>Un saludo,
>>
>>
>>"Xevi" <xevicomas@terra.es> escribió en el mensaje
>>news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>No se si tengo del TODO claro el proceso para imprimir en Xailer.
>>
>>Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
>>
>>Creamos un documento, (con la impresora por defecto)
>>Lo confeccionamos
>>Lo visualizamos
>>Seleccionamos la impresora
>>Lo imprimimos.
>>
>>
>>Bien, pues en Xailer, no se seguir este proceso "lógico".
>>
>> Printer:lPreviewModal := .T.
>>Creamos un documento
>> Printer:StartDoc()
>> Printer:oCanvas:nMapMode := mmHIMETRICS
>> Printer:StartPage()
>>Lo confeccionamos
>> Printer:StartPage()
>> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer
>>printing demo", CLR_BLUE)
>> Printer:EndPage()
>>Lo visualizamos
>> Por ahora, creo que se necesita de este evento, para clicar en el boton
>>imprimir, sinó no se lanza el documento a la impresora.
>> Printer:Preview()
>>Seleccionamos la impresora
>> ¿Cómo hago este proceso???
>> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero
>>aunque le de Aceptar, no me imprime NADA.
>> Si no llamo a Printer:Preview(), no se imprime el documento.
>> Printer:Preview() no dispone de un botón seleccionar impresora.
>>Lo imprimimos.
>> ¿Y este otro proceso???
>> ¿Y si no quiero visualizar el Preview???
>> Faltarí­a un Evento Printer:Print(), para cuando necesitáramos lanzar el
>>documento a la impresora seleccionada al Aceptar en el diálogo de
>>Impresoras.
>>
>>
>>
>>
>>Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora,
>>incluso antes de crear el documento
>> Printer:Run()
>>
>>Pero ¿no es mas lógico poder crear el documento, con la impresora por
>>defecto, y poderlo visualizar e imprimir en cualquier impresora instalada
>>en Windows???
>>Si primero tengo que seleccionar la impresora,... eso quiere decir que
>>cada vez que cambie de impresora, debo "reconstruir" el documento, de ser
>>así­ ¿algun evento que "reconstruya" el documento al cambiar de impresora
>>de salida del documento???
>>¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras,
>>simplemente contruir un documento e imprimirlo a la impresora por
>>defecto...?
>>
>>
>>Estas son mis dudas en el tema de impresión. Hasta hoy parecí­a que lo
>>tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas tengo.
>>
>>
>>Gracias.
>>
>>Un Saludo,
>>Xevi.
>>
>>
>
>
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9473
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TPrinter()

Mensaje por ignacio »

Xevi,
Para hacer lo que pides hay que lanzar UNA impresión para Preview y OTRA
para la impresora deseada. Es decir generar el listado DOS veces realmente.
Y así es como lo hace Word seguramente. En mi opinión es un error hacerlo
así teniendo en cuenta que el listado puede ser muy largo y que muchas veces
la confección de listados pueden tener mucho trabajo por detras.
En cualquier caso esa misma funcionalidad la puedes conseguir trabajandotelo
un poco, modificando el preview para que en retorno te diga sobre que
impresora se desea volver a imprimir. Si estás interesado en hacerlo me lo
dices.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:4347b1a7$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Ignacio,
>
>> No se cual es el otro GUI, pero si empieza por 'F' creo que estas
>> equivocado
> Desconozco "Fx", nunca me gustó, en mi opinión, le vi como un "parche" a
> Clipper...
> En "Cx" pues si que dispone de un Evento Printer:Print() que es quien
> lanza el documento que hemos "confeccionado" con la impresora por defecto,
> a la impresora que seleccionemos con el diálogo de Impresoras Windows...
>
>
> De hecho, cuando creamos un documento con Word, lo estamos
> "confeccionando" con la impresora por defecto o la que seleccionemos en el
> menu Archivo Impresora.
> Luego, si clicamos al botón de impresora, lo "lanza" a la impresora que
> tenemos seleccionada, o podemos ir al menu Abrir Imprimir, y se lanza el
> diálogo de impresoras, para escojer la impresora que realmente imprimirá
> el documento.
> Internamente, desconozco el funcionamiento, supongo que hace un Refresh()
> del documento en memoria, a la impresora escojida, pero al fin y al cabo
> es lo que un usuario pretende, confeccionar un documento, y lanzarlo a al
> impresora escojida...
>
> No creo que esté diciendo una barbaridad, sinó que es algo bastante lógico
> ¿no creeis???
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz" <Noname@ozs.com> escribió en el mensaje
> news:[email=4347aade@ozsrvnegro.ozlan.local...]4347aade@ozsrvnegro.ozlan.local...[/email]
>>
>> Xevi,
>>
>> No se cual es el otro GUI, pero si empieza por 'F' creo que estas
>> equivocado y supongo que con cualquier otro entorno te pasara lo mismo.
>> Es absolutamente necesario indicar la impresora sobre la que se va a
>> imprimir antes de confeccionar el documento. El propio API de Windows
>> exige un dispostivo de contexto creado para la impresora sobre la cual se
>> desea imprimir para poder siquiera empezar el documento, por lo tanto la
>> secuencia es la siguiente
>>
>> SELECCION DE LA IMPRESORA
>> Creación del documento
>> Impresión del mismo
>>
>> Es completamente imposible hacer lo que dices, por la sencilla razón que
>> cada impresora tiene resoluciones distintas, e incluso en una misma
>> impresora se pueden seleccionar distintas resoluciones. Para que lo
>> entiendas la hoja de papel sobre la que se imprime es dintinta en cada
>> caso. Los fonts se tienen que dimensionar con respecto a la resolución de
>> la impresora por ejemplo.
>>
>> La única forma de hacerlo sería, a mi modo de ver, la chapuza de imprimir
>> siempre en base a una resolución en milimetros por ejemplo y no en
>> pixeles y decirle a Windows que utilice un modo anisotrópico y te aseguro
>> que queda fatal en impresoras con mucha resolución, se nota la
>> pixelización tremendamente.
>>
>> Un saludo,
>>
>>
>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>> news:43476c7d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> No se si tengo del TODO claro el proceso para imprimir en Xailer.
>>
>> Hasta ahora, en otra GUI, y en cualquier proceso de impresión de Windows,
>>
>> Creamos un documento, (con la impresora por defecto)
>> Lo confeccionamos
>> Lo visualizamos
>> Seleccionamos la impresora
>> Lo imprimimos.
>>
>>
>> Bien, pues en Xailer, no se seguir este proceso "lógico".
>>
>> Printer:lPreviewModal := .T.
>> Creamos un documento
>> Printer:StartDoc()
>> Printer:oCanvas:nMapMode := mmHIMETRICS
>> Printer:StartPage()
>> Lo confeccionamos
>> Printer:StartPage()
>> Printer:oCanvas:TextRect( {1000, 1000, 1500, 1500}, 1000, 1000, "Xailer
>> printing demo", CLR_BLUE)
>> Printer:EndPage()
>> Lo visualizamos
>> Por ahora, creo que se necesita de este evento, para clicar en el
>> boton imprimir, sinó no se lanza el documento a la impresora.
>> Printer:Preview()
>> Seleccionamos la impresora
>> ¿Cómo hago este proceso???
>> Si llamo a Printer:Run(), me lanza el diálogo de Impresoras, pero
>> aunque le de Aceptar, no me imprime NADA.
>> Si no llamo a Printer:Preview(), no se imprime el documento.
>> Printer:Preview() no dispone de un botón seleccionar impresora.
>> Lo imprimimos.
>> ¿Y este otro proceso???
>> ¿Y si no quiero visualizar el Preview???
>> Faltaría un Evento Printer:Print(), para cuando necesitáramos lanzar
>> el documento a la impresora seleccionada al Aceptar en el diálogo de
>> Impresoras.
>>
>>
>>
>>
>> Por lo que se hasta ahora, antes de nada, debo seleccionar la impresora,
>> incluso antes de crear el documento
>> Printer:Run()
>>
>> Pero ¿no es mas lógico poder crear el documento, con la impresora por
>> defecto, y poderlo visualizar e imprimir en cualquier impresora instalada
>> en Windows???
>> Si primero tengo que seleccionar la impresora,... eso quiere decir que
>> cada vez que cambie de impresora, debo "reconstruir" el documento, de ser
>> así ¿algun evento que "reconstruya" el documento al cambiar de impresora
>> de salida del documento???
>> ¿Como lanzo el documento sin visualizar Preview ni diálogo de impresoras,
>> simplemente contruir un documento e imprimirlo a la impresora por
>> defecto...?
>>
>>
>> Estas son mis dudas en el tema de impresión. Hasta hoy parecía que lo
>> tenia bastante claro, pero ya veis que cuando mas avanzo, mas dudas
>> tengo.
>>
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder