Page 1 of 1

No sale del GET con Enter

Posted: Thu Aug 03, 2017 5:09 pm
by Julio Cepeda
No se qué hago mal que me ocurre una cosa que no me había pasado nunca.
No suelo usar ventanas, ( WINDOW ), excepto la principal del programa, siempre utilizo tipo DIALOG y nunca he tenido este problema.
El código es:

Code: Select all

 DEFINE WINDOW oDlg TITLE "Alta de albarán rápido" ;
 MDICHILD OF oWnd ;
 FROM 0,  0 TO  600, 800             ; //Alto y Ancho
 PIXEL COLOR CLR_BLACK,RGB(180,225,255) ;
 STYLE nOr( WS_CAPTION,              ;
            WS_MINIMIZEBOX,          ;
            WS_SYSMENU,              ;
            WS_THICKFRAME )

 @  0, 74 SAY oSay PROMPT "NºAlbarán" PIXEL SIZE  80, 18 COLOR CLR_BLACK,RGB(180,225,255) OF oDlg FONT oFont2
 @ 20, 74 GET aoGt[ 2 ] VAR cNumero12 PICTURE "@!" + Replicate( "X", 12 ) PIXEL SIZE 120, 20 OF oDlg FONT oFont2

 @  0,196 SAY oSay PROMPT "Fecha" PIXEL SIZE 44, 18 COLOR CLR_BLACK,RGB(180,225,255) OF oDlg
 @ 20,196 GET aoGt[ 3 ] VAR dFechaD08 PIXEL SIZE 80, 20 PICTURE "@D " OF oDlg

 ACTIVATE WINDOW oDlg
 
Compilo con FWH 11.06
Cuando aparece la ventana el cursor está en aoGt[ 2 ] escribo en la caja del GET perfectamente pero cuando pulso Enter o Tab no sale el cursor del este GET si quiero que salga e ir al siguiente tengo que pinchar con el ratón en el siguiente GET aoGt[ 3 ].

Si alguien sabe por qué y me puede ayudar le quedaría muy agradecido.
Un saludo a todos y gracias.

Re: No sale del GET con Enter

Posted: Thu Aug 03, 2017 5:38 pm
by karinha

Code: Select all

static oWnd, oClients


function GetAlbaran()

   local oBrw, oIco, oBar
   local CNUMERO12 := 0.00, aoGt := ARRAY(5), dFechaD08 := DTOC( DATE() )

   DEFINE ICON oIco FILENAME "..\icons\customer.ico"

   DEFINE WINDOW oClients TITLE "Clients management" ;
      MDICHILD ICON oIco PIXEL

   //DEFINE BUTTONBAR oBar OF oClients

   //DEFINE BUTTON OF oBar ACTION ShowClient()

   @  0, 74 SAY oSay PROMPT "NºAlbarán" PIXEL SIZE  80, 18 COLOR CLR_BLACK,RGB(180,225,255) OF oClients //FONT oFont2

   @ 20, 74 GET aoGt[ 2 ] VAR cNumero12 PICTURE "@!" + Replicate( "X", 12 ) PIXEL SIZE 120, 20 OF oClients //FONT oFont2

   @  0,196 SAY oSay PROMPT "Fecha" PIXEL SIZE 44, 18 COLOR CLR_BLACK,RGB(180,225,255) OF oClients

   @ 20,196 GET aoGt[ 3 ] VAR dFechaD08 PIXEL SIZE 80, 20 PICTURE "@D 99/99/99997" OF oClients

   ACTIVATE WINDOW oClients

return nil
 

Re: No sale del GET con Enter

Posted: Thu Aug 03, 2017 6:08 pm
by Julio Cepeda
Muchas gracias karinha y a todos. He probado tu código y me hace lo mismo necesito, dentro de una aplicación que tiene una ventana principal MDI, main(), y un menu crear una ventana o diálogo que no se quede con el foco, es decir que aunque esta esté abierta, me permita minimizar y seguir utilizando otras opciones de la aplicación. Las tengo todas con DIALOG y hasta que no cierro la que tengo abierta no puedo iniciar otra opción de la aplicación. Como esto no lo he necesitado hasta ahora pues no se hacerlo.

De nuevo muchas gracias

Re: No sale del GET con Enter

Posted: Thu Aug 03, 2017 6:42 pm
by Julio Cepeda
La ventana de la que he mostrado el código en el inicio de este post, si me hace lo que yo quiero y funciona independiente de las otras opciones dentro de la aplicación, pero me sucede ese defecto, no sale del GET ni pulsando Intro ni Tab. Si hago funcionar ese problema lo tengo arreglado.

Re: No sale del GET con Enter

Posted: Fri Aug 04, 2017 7:58 am
by Julio Cepeda
Muchas gracias a todos.
He probado el mismo código el solo en otro prg separado de la aplicación y funciona perfectamente.
Ya averiguaré por qué me hace eso integrado dentro de la aplicación.
Muchas gracias y un saludo.

Re: No sale del GET con Enter

Posted: Fri Aug 04, 2017 2:56 pm
by Julio Cepeda
Ya está resuelto, lo digo, por si a alguien le ocurre.
Compilando con FWH 11.07 no funciona el mismo código compilado con FWH 16.12 funciona perfectamente.
El problema es que no lo puedo compilar de momento con 16.12 ni con 17.01 porque con estas versiones no me funciona el cambio de impresora con el método "oPrn:Setup()" no me cambia la impresora sin embargo con la 11.07 "oPrn:Setup()" funciona perfectamente.

Gracias a todos.

Re: No sale del GET con Enter

Posted: Fri Aug 04, 2017 3:00 pm
by karinha
Intenta ahora:

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. 15/08/2016(Magda)
      SetDefaultPrinter( PRNGETNAME() ) // MUDA O DEFAULT DA IMPRESSORA

      MsgInfo( OemToAnsi( "Aten‡Æo Usu rio:                        " )+CRLF+ ;
               OemToAnsi( "Sua Impressora DEFAULT(PadrÆo) ‚:       " )+CRLF+ ;
                        ( "-> " + nPrn                               ),      ;
               OemToAnsi( "Sua Impressora DEFAULT(PadrÆo) ‚...     " ) )

      sGetDefaultPrinter := GetDefaultPrinter()

      // ? PrnStatus( sGetDefaultPrinter )

      IF PrnStatus( sGetDefaultPrinter ) = 4096

         // Verifica se SPOOLER esta desligado e tenta liga-lo
         MsgRun( sGetDefaultPrinter +": "+isprint( GetDefaultPrinter() ) + ;
                         " ou Spooler Desligado.", "Status da Impressora", ;
                 {|| WinExec( "NET START SPOOLER", 7 ) } )

      ENDIF

      //? GetPrinter()

   ELSE

      MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO:                         " )+CRLF+ ;
               OemToAnsi( "VERIFIQUE SUA IMPRESSORA SE ESTµ LIGADA. " )+CRLF+ ;
               OemToAnsi( "OU SE ESTµ INSTALADA CORRETAMENTE...     " )+CRLF+ ;
               OemToAnsi( "TEM ALGUMA COISA ERRADA COM A IMPRESSORA?" )+CRLF+ ;
               OemToAnsi( "TECLE <ENTER> PARA CONTINUAR...          " ),      ;
               OemToAnsi( "VERIFIQUE SUA IMPRESSORA SE ESTµ LIGADA. " ) )

      RETURN( .F. )

   ENDIF

RETURN NIL
 

Re: No sale del GET con Enter

Posted: Mon Aug 07, 2017 8:10 am
by Julio Cepeda
Muchas gracias karinha.
Ya he probado tu código y cambia la impresora por defecto de Windows perfectamente, todo correcto.
Lo que yo quiero y que si me funciona bien con FWH 11.06 y no con 16.12 ni con 17.01, es cambiar la impresora temporalmente para imprimir un documento pero que después de imprimir el documento vuelva a poner la misma impresora predeterminada que tenía Windows al iniciar la aplicación.

Code: Select all

 LOCAL oRpr, oGpr, oFon1, oFon2

 LOCAL n := 1, nUltimo := Len( aArray ) + 1

 DEFINE FONT oFon1 NAME "Courier New" SIZE 0, -11 BOLD
 DEFINE FONT oFon2 NAME "Courier New" SIZE 0, -12

 REPORT oRpr ;
    TITLE  " ",;
        EmpresaD->crazonso35, ;
        EmpresaD->cecifdni09, ;
        "Facturas clientes desde el: " + AllTrim( Str( ncCodigo09 ) ) + "  " + ccNombre35,;
    "hasta el: " + AllTrim( Str( ncCodigFin ) ) + "  " + ccNombrFin,;
    "Entre el " + Dtoc( dFecIni ) + " y el " + Dtoc( dFecFin ), ;
        " " ;
        LEFT;
    FONT     oFon1,;
    oFon2 ;
    HEADER " ",;
        "Fecha: "+DtoC(date())+"   "+"Hora:  "+Time(),;
    " " ;
    RIGHT ;
    FOOTER ;
    " Página: " + Str( oRpr:nPage, 3 ) ;
        LEFT CAPTION EmpresaD->crazonso35 ;
    PREVIEW

        COLUMN TITLE "NºCliente" DATA aArray[ n ][ 4 ] PICTURE "@E 999999999" SIZE 9 FONT 2 RIGHT GRID
        
        COLUMN TITLE "Cliente" DATA SubStr( aArray[ n ][ 5 ], 1, 25 ) SIZE 25 FONT 2 GRID

        COLUMN TITLE "Factura" DATA aArray[ n ][ 1 ] PICTURE "@E 999999999" SIZE 9 FONT 2 RIGHT GRID
        
        COLUMN TITLE "Fecha Fra." DATA aArray[ n ][ 3 ] PICTURE "@D" SIZE 10 FONT 2 GRID
        
        COLUMN TITLE "Base" DATA aArray[ n ][ 7 ] PICTURE "@EZ 999,999.99" SIZE 10 FONT 2 TOTAL RIGHT GRID

        COLUMN TITLE "Cuota" DATA aArray[ n ][ 8 ] PICTURE "@EZ 99,999.99" SIZE 9 FONT 2 TOTAL RIGHT GRID

        COLUMN TITLE "Total" DATA aArray[ n ][ 10 ] PICTURE "@EZ 999,999.99" SIZE 10 FONT 2 TOTAL RIGHT GRID

        GROUP ON aArray[ n ][ 4 ] ;
          FOOTER "Total cliente nº " + oRpr:aGroups[ 1 ]:cValue + Replicate( " ", 90 )

 END REPORT

 oRpr:bWhile := { || n < nUltimo }
 oRpr:bSkip  := { || n ++ }

 oRpr:bPostGroup  := { | | oRpr:NewLine() }
/*
Con este método aparece una ventana de selección de impresora, imprime con la que seleccione el usuario y después de imprimir deja la que tenía por defecto Windows antes de seleccionar
*/
 oRpr:oDevice:Setup()

 ACTIVATE REPORT oRpr

 oFon1:Release()
 oFon2:Release()
 
Por cierto, aunque tu código si compila y funciona, aparece "Warning W0001 Ambiguous reference 'sGetDefaultPrinter' que no se muy bien que es esto.

Muchas gracias de nuevo y recibe un saludo.

Re: No sale del GET con Enter

Posted: Mon Aug 07, 2017 12:17 pm
by karinha

Code: Select all

   LOCAL sGetDefaultPrinter
 

Re: No sale del GET con Enter

Posted: Mon Aug 07, 2017 2:37 pm
by Julio Cepeda
Gracias karinha.

Probaré a cambiar la impresora, imprimir, y volver a dejar la que estaba predeterminada.

Re: No sale del GET con Enter

Posted: Mon Aug 07, 2017 2:58 pm
by karinha
// classe: PRINTER.PRG

Code: Select all

   IF FWVERSION = "FWHX 11.06"
      // IMPRIMIR CON EL COMANDO DEL FWH11.06
   ELSEIF FWVERSION = "FWHX 16.12"
      // IMPRIMIR CON EL COMANDO DEL FWH16.12
   ELSEIF FWVERSION = "FWHX 17.01"
      // IMPRIMIR CON EL NUEVO COMANDO DEL FWH17.01
   ENDIF
 
Saludos.

Re: No sale del GET con Enter

Posted: Tue Aug 08, 2017 10:09 am
by Julio Cepeda
Es otra solución buena, de nuevo Muchas Gracias.

Re: No sale del GET con Enter

Posted: Tue Aug 08, 2017 6:31 pm
by Julio Cepeda
Ya me funciona con la ayuda de Karinha que me enseño las funciones de manejar la impresora ya me funciona de esta manera:

Code: Select all

 #include "FiveWin.ch"
 
 Function Main() 
 
 LOCAL oPrn, oFont1

 LOCAL cPrinter
 
 cPrinter := GetDefaultPrinter()

 PrinterSetUp()

 PRINT oPrn NAME "Prueba" PREVIEW

 IF Empty( oPrn:hDC )
   MsgStop( "¡ No hay IMPRESORA para imprimir !" )
   Return NIL
 EndIf
 
 DEFINE FONT oFont1 NAME "Arial" SIZE 0, -18  OF oPrn
 
   PAGE
 
     oPrn:CmSay ( 8,  2, PrnGetName(), oFont1 )

   ENDPAGE

 ENDPRINT

 oFont1:End()
 
 SetDefaultPrinter( cPrinter )

 Return NIL 
 
Muchas gracias a todos y en especial a Karinha.

Re: No sale del GET con Enter

Posted: Tue Aug 08, 2017 8:02 pm
by karinha
También, puedes hacer de esta forma:

Code: Select all

#Include "FiveWin.ch"

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2
 
Function Main()
 
   LOCAL oPrn, oFont1
   LOCAL cPrinter
   LOCAL ResLinea, ResColumna
 
   cPrinter := GetDefaultPrinter()

   PrinterSetUp()

   PRINT oPrn NAME "Prueba" PREVIEW MODAL

      IF Empty( oPrn:hDC )
         MsgStop( "¡ No hay IMPRESORA para imprimir !" )
         Return NIL
      EndIf
 
      DEFINE FONT oFont1 NAME "Arial" SIZE 0, -18 BOLD  OF oPrn

      oPrn:SetPage(9)     //-> A4 //9
      oPrn:SetPortrait()  //-> Vertical

      // para todos tipos de impresoras
      ResLinea   := oPrn:nLogPixely()/2.54
      ResColumna := oPrn:nLogPixelx()/2.54
 
      PAGE
 
         oPrn:Say ( 5.00 * ResLinea, 10.50 * ResColumna, PrnGetName(), ;
                    oFont1,, CLR_BLACK,, PAD_CENTER )

      ENDPAGE

   ENDPRINT

   oFont1:End()
 
   SetDefaultPrinter( cPrinter )

Return NIL
 
Regards, saludos.