Page 2 of 2

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 9:27 am
by mastintin
Antonio . Estos cambios no me resuelven el problema . Me imprime siempre en la impresora por defecto .
el nombre de la impresora "miEpson" es el nombre que tiene la impresora compartida , es una Epson LQ-300 . Hasta el momento funcionaba sin ningún problema.
en :
Code: Select all  Expand view


            pausa(cImpre)  // Valor cImpre == "miEpson"
            PRINT oPrn NAME cTitle TO cImpre
     
         
 


en printer :

Code: Select all  Expand view

    ....
        pausa(cModel)  // cModel  llega valor "miEpson" pero imprime en la impresora por defecto
      ::hDC = PrinterDcFromName( , cModel, )  // cambia aqui !!!

 

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 11:21 am
by mastintin
Amplio lo anterior :
Code: Select all  Expand view


    pausa( StrTran( StrTran( StrTran( ;
       GetProfString( "Devices", 0 ), Chr( 0 ), Chr( 15 ) ), Chr( 13 ) ), Chr( 10 ) )   )  // la impresora "miEpson" existe con este nombre

    pausa(cModel)  // cModel  llega valor "miEpson" pero imprime en la impresora por defecto
      ::hDC = PrinterDcFromName( , cModel, )  // cambia aqui !!!

     cModel = ::GetModel()
      pausa(cModel)    // cModel  aqui tiene valor "BROTHER HL" que esta por defecto

 

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 1:14 pm
by Antonio Linares
Manuel,

En la función PrinterDcFromName() llamamos a la función CreateDC() del API de Windows:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183490(v=vs.85).aspx

En la documentación del primer parámetro que recibe CreateDC() comentan:

lpszDriver
A pointer to a null-terminated character string that specifies either DISPLAY or the name of a specific display device. For printing, we recommend that you pass NULL to lpszDriver because GDI ignores lpszDriver for printer devices.


Es decir, tenemos que proporcionarle NULL. En el código actual de FWH tenemos:
Code: Select all  Expand view
HB_FUNC( PRINTERDCFROMNAME ) // ( cDriver, cModel, cPort )
{
   LPDEVMODE  lpDevMode;

   lpDevMode  = (LPDEVMODE) GlobalLock( pd.hDevMode );

   hb_retnl( ( LONG ) CreateDC( ( LPSTR ) hb_parc( 1 ),
                    ( LPSTR ) hb_parc( 2 ),
                    ( LPSTR ) hb_parc( 3 ),
                    lpDevMode ) );

   GlobalUnlock( pd.hDevMode );
}


Habría que comprobar si hb_parc( 1 ) de un valor nil devuelve una cadena vacia ó NULL.

Lo que comentas de que el segundo parámetro cModel cambia, eso parece imposible (a primera vista) pues desde esa función no se modifica el valor de esa variable.

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 1:16 pm
by Antonio Linares
En el tercer parámetro tenemos el mismo caso, ya que tenemos que suministrarle un NULL:

lpszOutput
This parameter is ignored and should be set to NULL. It is provided only for compatibility with 16-bit Windows.

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 1:22 pm
by Antonio Linares
Comprobado y efectivamente Harbour genera un NULL desde un valor nil:

Code: Select all  Expand view
HB_FUNC( PRINTERDCFROMNAME ) // ( cDriver, cModel, cPort )
{
   LPDEVMODE  lpDevMode;

   lpDevMode  = (LPDEVMODE) GlobalLock( pd.hDevMode );

   if( hb_parc( 1 ) != NULL )
      MessageBox( 0, "not NULL", "ok", 0 );  

   hb_retnl( ( LONG ) CreateDC( ( LPSTR ) hb_parc( 1 ),
                    ( LPSTR ) hb_parc( 2 ),
                    ( LPSTR ) hb_parc( 3 ),
                    lpDevMode ) );

   GlobalUnlock( pd.hDevMode );
}


Este ejemplo esta funcionando correctamente aqui:
Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oPrn

   PRINTER oPrn PREVIEW TO "Fax"
   
      PAGE
     
         oPrn:Say( 1, 1, "Hello world" )
     
      ENDPAGE

   ENDPRINTER

return nil


Debe tratarse de otra cosa lo que te ocurre en tu aplicación. Esa variable cModel es pública ? Puede estar siendo modificada desde otro evento ?

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 1:26 pm
by Antonio Linares
Carlos,

Si, la incluiremos en el siguiente build de FWH, aunque aun estamos pendientes de las pruebas de Manuel, para ver que le ocurre.

Si tu barra de botones principal tiene el estilo 2010 entonces el preview usa ese estilo tambien automaticamente :-)

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 1:41 pm
by colthop
Hola Antonio:

En lo referente a la PREVIEW si te lo comento es porque no tengo barra de botones y por eso te lo decía para que aparezca la del 2010.

Un saludo

Carlos

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 3:33 pm
by mastintin
Tengo delimitado el problema :
Code: Select all  Expand view

unction Main()

   local oPrn

   PRINT oPrn TO "miEpson" // Brother HL duplex"
     
     oPrn:SetPage(1)   // aqui esta el problema  ... si no pongo esta linea me lo manda a la Epson , si la pongo me lo manda a la Brother ( defecto )
     
      PAGE
         oPrn:Say( 4, 4, "hola mundo" )
      ENDPAGE
   ENDPRINT

return nil

 

Re: WindowsXp.Manifest

PostPosted: Tue Nov 05, 2013 6:03 pm
by colthop
Hola Antonio:

Pasa que el PREVIEW cuando le das a la lupa amplia a lo ancho pero no a lo largo y sale deformado. Se puede arreglar.

Un saludo

Carlos

Re: WindowsXp.Manifest

PostPosted: Thu Nov 07, 2013 8:15 am
by mastintin
¿ tenemos algo nuevo ? .

mastintin wrote:Tengo delimitado el problema :
Code: Select all  Expand view

unction Main()

   local oPrn

   PRINT oPrn TO "miEpson" // Brother HL duplex"
     
     oPrn:SetPage(1)   // aqui esta el problema  ... si no pongo esta linea me lo manda a la Epson , si la pongo me lo manda a la Brother ( defecto )
     
      PAGE
         oPrn:Say( 4, 4, "hola mundo" )
      ENDPAGE
   ENDPRINT

return nil

 

Re: WindowsXp.Manifest

PostPosted: Thu Nov 07, 2013 10:47 am
by colthop
Hola a todos:

He detectado otro problema, Cuando pongo botones en un DIALOG y le asigno una letra para ejecutarlo con el ALT "&Alta" la combinación de letras Alt+A no ejecuta el botón. sin embargo si es una WINDOW si funciona.

Un saludo

Carlos