Page 1 of 1

oPrn:Setup() en FWH 16.12

Posted: Mon Jan 16, 2017 10:49 am
by Julio Cepeda
He compilado el código que ya tenía escrito de la versión anterior de FWH con la nueva versión 16.12 y aparte de GetCurDir() que lo he tenido que modificar los path y con esto se ha resuelto, también me hace mal el oPrn:Setup() ya que me saca la ventana de selección de impresora, me deja seleccionar una diferente a la predeterminada pero no funciona dicha selección porque selecciones la que sea siempre imprime por la prederterminada.
Si alguien le ha pasado esto y conoce la solución le estaría muy agradecido por sus indicaciones.

Gracias

Re: oPrn:Setup() en FWH 16.12

Posted: Mon Jan 16, 2017 11:49 am
by karinha

Re: oPrn:Setup() en FWH 16.12

Posted: Mon Jan 16, 2017 11:55 am
by karinha

Code: Select all

// Printing in portrait and in landscape

#include "fivewin.ch"

#define PAD_LEFT            0
#define PAD_RIGHT           1
#define PAD_CENTER          2

function Main()
   local oPrn, oFont, oPen
   Local nLinI, nColI, nLinF, nColF
 

   //PRINT oPrn NAME "Impresión en Vertical.." PREVIEW

   PRINT oPrn NAME "Impresión en Vertical.." PREVIEW MODAL

      DEFINE FONT oFont NAME "Arial" SIZE 0, -10 BOLD OF oPrn
      DEFINE PEN oPen WIDTH  2                        OF oPrn

      oPrn:Setup()
 
      oPrn:SetPage(9)  // A4
      oPrn:SetPortrait() //Vertical

      PAGE
         nLinI :=  0.90
         nColI :=  0.90
         nLinF := 28.6
         nColF := 20.0
         oPrn:Cmtr2Pix(@nLinI, @nColI)
         oPrn:cmtr2Pix(@nLinF, @nColF)
         oPrn:Box(nLinI, nColI, nLinF, nColF, oPen  )
         oPrn:cmSay( 1.0,  1.0, "Superior Izquierda", oFont,,CLR_BLACK,,PAD_LEFT  )
         oPrn:cmSay( 1.0, 10.5, "Superior Centro",    oFont,,CLR_BLACK,,PAD_CENTER )
         oPrn:cmSay( 1.0, 20.0, "Superior Derecha",   oFont,,CLR_BLACK,,PAD_RIGHT )
         oPrn:cmSay(28.0,  1.0, "Inferior Izquierda", oFont,,CLR_BLACK,,PAD_LEFT  )
         oPrn:cmSay(28.0, 10.5, "Inferior Centro",    oFont,,CLR_BLACK,,PAD_CENTER )
         oPrn:cmSay(28.0, 20.0, "Inferior Derecha",   oFont,,CLR_BLACK,,PAD_RIGHT )
      ENDPAGE
   ENDPRINT
 

   PRINT oPrn NAME "Impresion Horizontal..." PREVIEW
      DEFINE FONT oFont NAME "Arial" SIZE 0, -10 BOLD OF oPrn
      DEFINE PEN oPen WIDTH  2                        OF oPrn
      oPrn:SetPage(9)  //a4
      oPrn:SetLandscape() // HORIZONTAL
      PAGE
         nLinI :=  0.90
         nColI :=  0.90
         nLinF := 20.1
         nColF := 28.6
         oPrn:Cmtr2Pix(@nLinI, @nColI)
         oPrn:cmtr2Pix(@nLinF, @nColF)
         oPrn:Box(nLinI, nColI, nLinF, nColF, oPen  )
         oPrn:cmSay( 1.0,  1.0, "Superior Izquierda", oFont,,CLR_BLACK,,PAD_LEFT  )
         oPrn:cmSay( 1.0, 14.8, "Superior Centro",    oFont,,CLR_BLACK,,PAD_CENTER )
         oPrn:cmSay( 1.0, 28.0, "Superior Derecha",   oFont,,CLR_BLACK,,PAD_RIGHT )
         oPrn:cmSay(19.5,  1.0, "Inferior Izquierda", oFont,,CLR_BLACK,,PAD_LEFT  )
         oPrn:cmSay(19.5, 14.8, "Inferior Centro",    oFont,,CLR_BLACK,,PAD_CENTER )
         oPrn:cmSay(19.5, 28.0, "Inferior Derecha",   oFont,,CLR_BLACK,,PAD_RIGHT )
      ENDPAGE
   ENDPRINT
 
return nil
 

Re: oPrn:Setup() en FWH 16.12

Posted: Mon Jan 16, 2017 6:45 pm
by Julio Cepeda
Muchas gracias por tu respuesta karinha. No tengo ningún problema para cambiar la orientación, horizontal o vertical.
El problema que tengo es que si compilo con la version de FWH 11.07 cuando se ejecuta oPrn:Setup() me presenta Windows la ventana de Seleccionar Impresora con las impresoras instaladas en el PC, selecciono una que no es la predeterminada y me imprime por la que yo selecciono.
Sin embargo compilo el mismo código con FWH versión 16.12 cuando se ejecuta oPrn:Setup() me presenta Windows la ventana de Seleccionar Impresora con las impresoras instaladas en el PC, selecciono una que no es la predeterminada y me imprime por la predeterminada y no por la que yo he seleccionado.

Gracias.

Re: oPrn:Setup() en FWH 16.12

Posted: Mon Jan 16, 2017 7:10 pm
by karinha
Creo, sea esto:

Code: Select all

FUNCTION DefaultPrinter() 

   LOCAL nPrn, nRet

   // Abre a tela para a seleção da impressora
   /*
   GetPrintDC( GetActiveWindow() )

   // Coloca a impressora selecionada como Default do Windows
   SetDefaultPrinter( PRNGETNAME() )
   */

   nRet := PrinterSetUp()

   nPrn := PrnGetName()

   IF( nRet # 0 )

      // NADA A FAZER MUDA O DEFULT DA IMPRESSORA EM TEMPO REAL.
      SetDefaultPrinter( PRNGETNAME() ) // MUDA O DEFAULT DA IMPRESSORA

      // Mensageria

   ELSE

      // mensageria

      RETURN( .F. )

   ENDIF

RETURN NIL
 
nueva function de PRINTER.PRG de FWHX16.12

Code: Select all

function SetPrintDefault( cModel )

   local cDriver := StrToken( GetProfString( "Devices", cModel, "" ), 1, "," )
   local cPort   := StrToken( GetProfString( "Devices", cModel, "" ), 2, "," )

   WriteProfString( "Windows", "Device", cModel + "," + cDriver + "," + cPort )

return nil
 
Saludos.