Error entrada con pad numérico RESUELTO

Post Reply
horacio
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Error entrada con pad numérico RESUELTO

Post by horacio »

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: Select all | Expand


#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
Last edited by horacio on Wed Feb 11, 2015 3:14 pm, edited 1 time in total.
User avatar
Antonio Linares
Site Admin
Posts: 42655
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 67 times
Been thanked: 96 times
Contact:

Re: Error entrada con pad numérico

Post by Antonio Linares »

En vez de usar bKeyDown prueba con bKeyChar
regards, saludos

Antonio Linares
www.fivetechsoft.com
horacio
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Error entrada con pad numérico

Post by horacio »

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

Saludos
horacio
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Error entrada con pad numérico

Post by horacio »

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
Post Reply