Page 1 of 1

Control Botón de Impresión

Posted: Tue Sep 08, 2015 4:17 pm
by leandro
Buenos días para todos....

En este oportunidad debo poder ejecutar una acción al momento que el usuario envié la orden de impresión. Lo que requiero es hacer el registro en una tabla del usuario, la hora y la fecha en la que se dio la orden de impresión del documento.

Saludos

Image
imagen

Re: Control Botón de Impresión

Posted: Tue Sep 08, 2015 5:36 pm
by Antonio Linares
Leandro,

Lo más sencillo es modificar el código de FWH\source\classes\rpreview.prg

Si nos muestras el código fuente de como construyes ese impreso, tal vez encontremos una forma de hacerlo que no precise de modificar rpreview.prg

Re: Control Botón de Impresión

Posted: Thu Sep 10, 2015 7:24 am
by luisduque
Hola Leandro

como dice el Maestro Antonio Linares

Modifica la clase rpreview

METHOD PrintPage() CLASS TPreview

local hMeta := ::oMeta1:hMeta
local oDlg, oRad, oPageIni, oPageEnd
local nOption := 1, nFirst := 1, nLast := Len( ::oDevice:aMeta ) // DEVICE
local oThis := Self
local lCancel := .t.

if nLast != 1

DEFINE DIALOG oDlg SIZE 400, 183 TITLE FWString( "Printing" )
oDlg:lTruePixel := .f.

@ 8, 8 GROUP PROMPT FWString( "Printing range" ) SIZE 135, 72 PIXEL OF oDlg

@ 18, 18 RADIO oRad VAR nOption ;
ITEMS FWString( "All" ), FWString( "Current page" ), FWString( "Pages" ) ;
ON CHANGE If( nOption == 3,;
( oPageIni:Enable(), oPageEnd:Enable() ),;
( oPageIni:Disable(), oPageEnd:Disable() ) ) PIXEL

@ 61, 30 SAY FWString( "From" ) OF oDlg PIXEL

@ 60, 53 GET oPageIni ;
VAR nFirst PICTURE "@K 99999" ;
VALID If( nFirst < 1 .or. nFirst > nLast, ( MsgBeep(), .F. ), .T. ) ;
OF oDlg SIZE 22, 11 PIXEL

@ 61, 80 SAY FWString( "To" ) OF oDlg PIXEL

@ 60, 103 GET oPageEnd ;
VAR nLast PICTURE "@K 99999" ;
VALID If( nLast < nFirst .or. nLast > Len( ::oDevice:aMeta ),; // DEVICE
( MsgBeep(),.F. ), .T.) OF oDlg PIXEL

@ 10, 152 BUTTON FWString( "&Ok" ) OF oDlg SIZE 42, 14 ;
ACTION ( lCancel := .f., oDlg:End() ) PIXEL

@ 28, 152 BUTTON FWString( "&Cancel" ) OF oDlg SIZE 42, 14 ;
ACTION oDlg:End() PIXEL

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( oPageIni:Disable(), oPageEnd:Disable(), .T. )

else
lCancel := .f.
endif

if ! lCancel
MsgRun( ::oDevice:cDocument, "Printing Report",;
{ || ::PrintPrv( nil, nOption, nFirst, nLast ) } )
endif
///puedes colocar lo que quieras hacer en mi caso me toco para una impresión particular salir al imprimir por medio de la variable zPrintTick que es una variable de mi software
If zPrintTick
::oWnd:End()
EndIf
///
return nil

Re: Control Botón de Impresión

Posted: Thu Sep 10, 2015 1:29 pm
by leandro
Antonio y Luis muchas gracias por responder. Ya había mirado esa opción, pero la verdad es que no me gusta modificar las clases. Pensé que posiblemente había otra forma de hacerlo. Voy a crear un pequeño dialogo para controlar ese proceso.

Re: Control Botón de Impresión

Posted: Thu Sep 10, 2015 2:37 pm
by cnavarro
Por qué no haces solo un EXTEND CLASS del METHOD BuildButtonBar y en el ACTION del PrintPage, haces antes una llamada a tu funcion?
.... ACTION ( MiFunc(), ::PrintPage(), .. )

Aunque lo interesante seria tener las acciones de los botones en un array de codeblocks para poderlos modificar

Re: Control Botón de Impresión

Posted: Thu Sep 10, 2015 2:57 pm
by Armando
Leandro:

Me parece que lo mas sensato es lo que te recomienda el Teacher Antonio, modifica el RPReview.Prg

1.- Creas una variable pública desde tu aplicación, por ejemplo
MEMVAR lImpreso := (.F.)

2.- En el RPReview.Prg recibes esa variable
MEMVAR lImpreso

3.- El la parte del código donde se imprime la vista previa (RPReview.Prg), en el que tengo yo
es en la parte:

Code: Select all

STATIC FUNCTION PrintPrv(oDlg, nOption, nPageIni, nPageEnd)

LOCAL oDevice := DEVICE
LOCAL aFiles := oDevice:aMeta
LOCAL hMeta := oMeta1:hMeta
LOCAL nFor

CursorWait()

StartDoc(oDevice:hDC, oDevice:cDocument )

lImpreso := (.T.)  ////   Aquí  *******************************
 
cambias la variable a TRUE

4.- Ya en la parte de tu aplicación puedes hacer lo que desees una vez que la variable lImpreso
esta en TRUE

Ojalá te sirva el ejemplo, Saludos

Re: Control Botón de Impresión

Posted: Thu Sep 10, 2015 5:01 pm
by cnavarro
Es cuestion de gustos, en mi pueblo se dice "Cada maestrillo tiene su librillo" :D
Este es mi "librillo": Todos tenemos versiones personalizadas de varias ( e incluso muchas ) clases
Al igual que a Leandro, no me gusta modificar las clases, ya que en futuras actualizaciones de Fwh tengo que estar comparando con las actualizaciones de esas clases si deseo utilizar las novedades y mejoras que traen.
Con el EXTEND CLASS solo me preocupo de comparar ese/esos metodo(s) en concreto que puedo tener agrupados en un solo PRG, así en el caso de que dichas actualizaciones ya contemplen o mejoren los requisitos que necesito, solo tengo que borrar dicho metodo del modulo de EXTENDS.PRG que añado a los proyectos como un PRG mas.
Saludos

Re: Control Botón de Impresión

Posted: Fri Sep 11, 2015 9:44 pm
by leandro
Cristobal y Armando Gracias por responder.

Armando la verdad es que no me gusta eso de modificar las clases, una vez lo hice asi y tuve muchos problemas. De todas formas voy a intentarlo solo para probar.

Cristobal gracias por la ayuda, voy a seguir tu consejo.

Pruebo y comento.

Re: Control Botón de Impresión

Posted: Wed Sep 16, 2015 6:37 pm
by antolin
Si añades un codeblock, por ejemplo, bPrint, y lo llamasdesde el método PrintPrv:

Code: Select all

DATA bPrint
...
...

METHOD PRINTPRV()
...
if ::bPrint # NIL
   EVAL(::bPrint,Self,...)
endif
...
El cambio es muy pequeño y no tiene que modificar ningún programa. Y ya lo tienes para los restos. Estoy pensando en hacerlo para mi, por lo que pueda pasar...

Un saludo.