FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error entrada con pad numérico RESUELTO
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Error entrada con pad numérico RESUELTO
Posted: Mon Feb 09, 2015 10:29 PM
Colegas, tengo un xbrowse donde implementé una búsqueda. Si presiono una tecla se abre un dialogo donde tengo un get para completar de teclear el dato a buscar. El problema se me presenta cuando el dato a buscar es numérico y utilizan el pad para ingresar los datos. Cuando presiono el primer número se abre el dialogo pero me muestra un carácter y no el número que presioné. Si continuo tecleando funciona bien. Esto no pasa con las teclas numéricas ( no del pad numérico ). Posteo un ejemplo de este problema.

Code (fw): Select all Collapse
#include "fivewin.ch"
#include "xbrowse.ch"
Static oBrw
Static oWnd
Static aDatos
Static cVarBus

//----------------------------------------------------------------------------//
Function Main()

    Datos()
    Define Window oWnd Mdi
    
        Define ButtonBar oBar Size 50, 50 Of oWnd 2010 
        
    Activate Window oWnd Maximized On Init Tabla()  

    Return 0
    
//----------------------------------------------------------------------------//
Function Tabla()    

    Local oWndChild
    
    Define Window oWndChild MdiChild    Of oWnd         
        
        @ 50, 50 xBrowse oBrw Array aDatos Of oWndChild Columns 1, 2, 3, 4 Pixel Size 500, 500 Headers 'Nº FACTURA', 'FECHA', 'CONCEPTO', 'IMPORTE' NoBorder
        oBrw : CreateFromCode() 
        oBrw : bKeyDown := { | nKey | KeyFacturas( nKey ) }
        oWndChild : SetControl( oBrw )
        
    Activate Window oWndChild Maximized
    Return 0
    
//----------------------------------------------------------------------------//
Function KeyFacturas( nKey )

    Switch nKey
        Case VK_RETURN
            Exit
        Case VK_INSERT
            Exit
        Otherwise
            cVarBus := Chr( nKey )
            BuscaElDato( nKey )
    End Switch
    Return 0                    
    
//----------------------------------------------------------------------------//
Function BuscaElDato( nKey )    
    
   Local oDlg
   Local oFont
   Local oGrupo
   Local oGet      := Array( 2, 0 )
   Local cVar      := Chr( nKey ) + Space( 29 )
    Local cVar1     := Space( 10 )
    Local lIsNumber := .f.

    Define Font oFont Name 'Arial' Size 0, -11
    
   Define Dialog oDlg From 20, 20 To 110, 290 Pixel Of oBrw Font oFont

      oDlg : SetText( 'Buscar ...' )
      oDlg : nStyle := nOr( DS_MODALFRAME )
      
        @ 00, 01 Group oGrupo To 34, 133 Pixel Of oDlg
      @ 07, 06 Say 'Proporcione el texto o parte del dato a localizar' Of oDlg Size 120, 10 Pixel
        @ 17, 13 Get oGet[ 1 ] Var cVar Size 115, 10 Of oDlg Picture '@!' Pixel //Valid( oGet[ 1 ] : Assign(), BuscaElEmpleado( cVar ), oDlg : End(), .t. )
        oGet[ 1 ] : bKeyDown := { | nKey | If( nKey == VK_RETURN, oGet[ 2 ] : SetFocus(), ) }
      oGet[ 1 ] : nPos := 2
        oGet[ 1 ] : oWnd : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, oDlg : End(), ) }
      @ 87, 13 Get oGet[ 2 ] Var cVar1 Size 115, 10 Of oDlg Pixel

   Activate Dialog oDlg Centered //Valid( BuscaElEmpleado( cVar ), .t. )
   oFont : End()
   Return 0


//----------------------------------------------------------------------------//
Function Datos()    

    aDatos := { { 10889, "11/30/07", "DICIEMBRE 2007", 309.00 },;
                    { 10965, "12/28/07", "RESERVA VACANTE 2008 2DO CICLO", 230.00 },;
                    { 11034, "02/25/08", "RES.VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11035, "02/25/08", "RES. VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11036, "02/25/08", "RES. VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11037, "02/25/08", "RES.VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11042, "02/25/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11043, "02/25/08", "RESERVA VACANTE 2008 3ER CICLO", 264.00 },;
                    { 11044, "02/25/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11045, "02/26/08", "RES. VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11046, "02/26/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11051, "02/27/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11052, "02/28/08", "RES. VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11053, "02/28/08", "RES.VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11056, "02/28/08", "FEBRERO 2008", 242.00 },;
                    { 11057, "02/28/08", "FEBRERO 2008", 242.00 },;
                    { 11058, "02/29/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11059, "03/01/08", "RESERVA  VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11060, "03/01/08", "RESERVA  VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11061, "03/01/08", "RESERVA  VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11062, "03/01/08", "RESERVA  VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11063, "03/01/08", "RESERVA  VACANTE 2008 1ER CICLO", 242.00 },;
                    { 11064, "02/28/08", "MARZO 2008", 242.00 },;
                    { 11066, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11068, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11070, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11072, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11073, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11074, "02/28/08", "MARZO 2008", 253.00 },;
                    { 11075, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11078, "03/01/08", "RESERVA VACANTE 2008 2DO CICLO", 253.00 },;
                    { 11079, "03/01/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11080, "02/28/08", "MARZO 2008", 264.00 },;
                    { 11082, "03/01/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11084, "03/01/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11085, "03/01/08", "RES.VACANTE 2008 SECUNDARIA", 264.00 },;
                    { 11086, "02/28/08", "MARZO 2008", 264.00 },;
                    { 11087, "02/28/08", "MARZO 2008", 264.00 } }
    aDatos := ASort( aDatos,,, { | x, y | x[ 1 ] < y[ 1 ] } )                                                 
    Return 0


Alguna idea ?. Muchísimas gracias

Saludos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error entrada con pad numérico
Posted: Wed Feb 11, 2015 06:00 AM

En vez de usar bKeyDown prueba con bKeyChar

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Error entrada con pad numérico
Posted: Wed Feb 11, 2015 12:47 PM

Antonio, y como sería ???. Gracias

Saludos

Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Error entrada con pad numérico
Posted: Wed Feb 11, 2015 03:14 PM

Antonio, ya lo resolví, cambié el método bKeyDown por bKeyChar y funcionó. Solo por curiosidad, que diferencia hay entre estos dos métodos ?. Gracias

Saludos

Continue the discussion