Page 1 of 1

BUTTONBAR no sale CON VK_ESCAPE (RESUELTO)

Posted: Tue May 14, 2019 7:40 pm
by albeiroval
Buenas Noches.

Necesito salir con la tecla VK_ESCAPE en un BUTTONBAR pero no lo hace.
Aqui el codigo que uso.

Code: Select all

static Function DialogMain() 
  Local oDlg
  Local oFont
  Local oBar
  Local bKeydown
  Local oBtn         := Array(4)
  Local lExitDlg := FALSE
  
  DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12 BOLD
    
  DEFINE DIALOG oDlg RESOURCE "ButtonBar" TITLE "Egreso de Caja" FONT oFont ICON aBitmap[ BMP32_ICON ]; 
    TRANSPARENT
    
  REDEFINE BUTTONBAR oBar id 100 OF oDlg 2010 SIZE 75, 70

  DEFINE BUTTON oBtn[1] OF oBar; 
    PROMPT "Nueva"; 
    RESOURCE aBitmap[ BMP32_NEW ];  
    
  DEFINE BUTTON oBtn[2] OF oBar; 
    PROMPT "Buscar"; 
    RESOURCE aBitmap[ BMP32_SEARCH ]; 
    
  DEFINE BUTTON oBtn[3] OF oBar; 
    PROMPT "Listar"; 
    RESOURCE aBitmap[ BMP32_BROWSE ];   
    GROUP  
    
  DEFINE BUTTON oBtn[4] OF oBar; 
    PROMPT "Salir"; 
    RESOURCE aBitmap[ BMP32_EXIT ]; 
    ACTION ( lExitDlg:= TRUE, oDlg:End() ); 
    GROUP
    oBtn[4]:lCancel = TRUE 
    
  oBar:WinStyle( WS_BORDER, .F. )   
    
  AEval( oDlg:aControls, {|o| o:bKeyDown := {|nKey| KeyDown( nKey, oDlg, @lExitDlg )} } )
  
  ACTIVATE DIALOG oDlg;
    VALID lExitDlg;
    ON INIT ( DisableSysMenuDlg(oDlg) )
    
  RELEASE FONT oFont
    
Return Nil

static Function KeyDown( nKey, oDlg, lExitDlg )
    
    if GetKeyState( VK_ESCAPE )
       ? "VK_escape"
     lExitDlg := TRUE
     oDlg:End()
  else 
     ? "nKey", nKey
    endif 
                                    
Return Nil

 

Re: BUTTONBAR no sale CON VK_ESCAPE

Posted: Tue May 14, 2019 8:19 pm
by joseluisysturiz
Saludos, solo por casualidad...no hagas comparacion si no asignacion...prueba con oBtn:lCancel := .t., no se, es solo costumbre de hacerlo asi y funciona al pelo sin hacer mas nada, gracias... :shock:

Re: BUTTONBAR no sale CON VK_ESCAPE

Posted: Tue May 14, 2019 8:37 pm
by albeiroval
Jose luis, un saludo hermano.

La instruccion oBtn[4]:lCancel = TRUE no es para comparacion lo que hace es asignar el valor TRUE, igual probe
como tu dices oBtn[4]:lCancel := TRUE y tampoco funciona

Re: BUTTONBAR no sale CON VK_ESCAPE

Posted: Tue May 14, 2019 8:46 pm
by karinha
STATIC lExitDlg := .F.

en el boton de salida,

lExitDlg := .T.

Re: BUTTONBAR no sale CON VK_ESCAPE

Posted: Tue May 14, 2019 9:12 pm
by albeiroval
Karihna,
STATIC lExitDlg := .F.

en el boton de salida,

lExitDlg := .T.
Tampoco funciona

Re: BUTTONBAR no sale CON VK_ESCAPE (RESUELTO)

Posted: Tue May 14, 2019 9:42 pm
by albeiroval
Me respondo yo mismo.

Code: Select all

oDlg:bValid = <||
                                if GetKeyState( VK_ESCAPE ) 
                                 if MsgYesNo("Salir de Egresos ?", Name_Empresa)
                                    oDlg:End()
                                    Return TRUE
                                     endif
                                endif
                                
                                Return FALSE
                                >
 
ACTIVATE DIALOG oDlg;
    ON INIT ( DisableSysMenuDlg(oDlg) )
 
 

Re: BUTTONBAR no sale CON VK_ESCAPE (RESUELTO)

Posted: Tue May 14, 2019 10:21 pm
by cmsoft
La tecla ESC por defecto cierra el dialogo, excepto que tenga una clausula Valid, pero es cierto que no la entrega como una nKey.
En tu ejemplo hubiese bastado:

Code: Select all

ACTIVATE DIALOG oDlg;
    ON INIT ( DisableSysMenuDlg(oDlg) )

Re: BUTTONBAR no sale CON VK_ESCAPE (RESUELTO)

Posted: Tue May 14, 2019 10:29 pm
by albeiroval
cmsoft,
La tecla ESC por defecto cierra el dialogo, excepto que tenga una clausula Valid, pero es cierto que no la entrega como una nKey.
ESO LO SE, pero no me gusta porque no anticipa el cierre del dialogo al usuario, por eso necesitaba el control del cierre.
Usando el codigo que postie funciona perfecto.