Page 1 of 1

Salir de DLG con gets, con ESC

Posted: Thu Dec 05, 2013 5:02 pm
by noe aburto
Saludos foro.

Por sentir que es mas practico con algunos clientes el uso de la tecla ESC en lugar del tsbutton 7.0 con la opcion cancelar
no he podido resolver como hacerlo, tengo esto:

DEFINE DIALOG oDLG(1) FROM nTop,nIzq-3 TO nBot+40,nDer STYLE nOR( DS_MODALFRAME, WS_POPUP ) PIXEL;
COLOR aCOLOR(19),aCOLOR(18)

@ 1, 1 get oGet1 var cGet1 picture '@!'
@ 1,10 get oGet2 var cGet2 picture '@R'
@ 1,40 get oGet3 var cGet3 picture '@S20'
etc...

@ (nBot-nTop)-2,(nDer-nIzq)/2-71 SBUTTON oBtn[1] PROMPT '&Aceptar' RESOURCE 'GOSEMA','GOSEMV' OF oDLG(1);
ACTION ( lSalir:=ValidaVent(aVent),;
IF( lSalir,;
( _lSalvar:=.T.,;
AfectaDBF(aVent,lBloquea,bProceso),;
oDLG(1):End() ),;
NIL) );
XP COLOR COLOR_ACEPTA;
SIZE 33,12 TEXT POSITION 4;
PIXEL

@ (nBot-nTop)-2,(nDer-nIzq)/2-34 SBUTTON oBtn[2] PROMPT '&Cancelar' RESOURCE 'GOSEMN','GOSEMR' OF oDLG(1);
ACTION ( lSalir:=.t., _lSalvar:=.F.,;
AfectaDBF(aVent,lBloquea,bProceso),;
oDLG(1):End() );
XP COLOR COLOR_CANCELA;
SIZE 33,12 TEXT POSITION 4;
PIXEL CANCEL

ACTIVATE DIALOG oDLG(1)

En el dialogo tenglo los gets en en una sola linea, y si soy "aceptar" va y afecta mi dbf, si doy "cancelar" no afecta mis dbf, esto funciona perfecto, pero como hago que al teclear ESC, este dialogo se cierre y no afecte a los botones.

Alguna sugerencia.

Re: Salir de DLG con gets, con ESC

Posted: Thu Dec 05, 2013 6:34 pm
by sysctrl2
es mu sencillo:

Code: Select all | Expand

FUNCTION DLG()
local lExit := .f.
local oBox
local oBtn1, oBtn2
DEFINE DIALOG oBox  SIZE 400, 330

@ 6.5, 4.5 BUTTON oBtn[1] PROMPT "&Aceptar"  SIZE 60, 24 OF oBox ;
       ACTION (  lExit := .t., oBox:end()  )

  @ 6.5, 15.5 BUTTON oBtn[2] PROMPT "&Regresar" SIZE 60, 24 OF oBox  ACTION ( oBox:end() ) CANCEL


ACTIVATE DIALOG oBox CENTERED

if lExit
 *** guardalo
endif

return nil

Re: Salir de DLG con gets, con ESC

Posted: Thu Dec 05, 2013 7:17 pm
by horacio
No sé si entendí bien pero se me ocurre esto

Code: Select all | Expand


   oGet : oWnd : bKeyDown := { | nKey | If( nKey == VK_ESCAPE, ( lSalir := .t., oDlg : End() ), ) }
 


Saludos

Re: Salir de DLG con gets, con ESC

Posted: Thu Dec 05, 2013 8:06 pm
by derpipu
Hola, solo usa la clausula CANCEL despues del action del boton: ACTION ( oBox:end() ) CANCEL

Saludos

Re: Salir de DLG con gets, con ESC

Posted: Thu Dec 05, 2013 8:46 pm
by noe aburto
Saludos.

Estimados colegas, ya lo he intentado con el ejemplo que exponen sin resultado positivo.

Horacio, ya habia intentado con bKeyDown, el caso de este, es que no me reconoce la tecla ESC, cualquier tecla, incluyendo enter me la identifica, menos ESC, y logico, nunca entraria a oDLG:End()

Seguire intentando

Re: Salir de DLG con gets, con ESC

Posted: Fri Dec 06, 2013 1:52 am
by joseluisysturiz
Yo te recomendaria que le quitases la opcion de salir con ESC...asi educas al usuario a usar los botones..sino, para que los hacemos..? saludos... :shock:

Re: Salir de DLG con gets, con ESC

Posted: Fri Dec 06, 2013 10:09 am
by hmpaquito
joseluisysturiz wrote:.asi educas al usuario a usar los botones..sino, para que los hacemos..?


Muchos usuarios han aprendido de los smartphones que esta genial tener un programa que esta pensado para ser agil en el manejo, y para posibilidades ¡ las que da un sistema escritorio !
Habra usuarios que solo utilicen los botones, usuario estilo marmota hibernada, pero otros usuarios agradeceran mucho que se pueda utilizar el teclado porque les da agilidad de manejo.
Lo que de algun modo quiero decir, es que hay variedad de tipos de usuarios y por tanto hay que pensar en todos ellos y ampliar las posibilidades de manejo del programa a todos ellos.

Re: Salir de DLG con gets, con ESC

Posted: Fri Dec 06, 2013 3:38 pm
by joseluisysturiz
Estoy de acuerdo contigo, si pero no...jejejje.... intentastes con esto en el ON INIT VALID( GETKEYSTATE( VK_ESCAPE ) ).? saludos... :shock:

Re: Salir de DLG con gets, con ESC

Posted: Fri Dec 06, 2013 6:56 pm
by noe aburto
Resuelto:

oGET:bKeyDown:={|nKey|IF(GetKeyState(VK_ESCAPE),oDLG:End(),NIL)}

y estando en cualquier GET del oDLG sale con ESC