Page 1 of 1

Anular Salida de dialog con scape

Posted: Sun Aug 12, 2007 8:56 am
by Verhoven
¿Como se anula que se cierre una ventana de un dialogo con escape?

Saludos.

Posted: Sun Aug 12, 2007 9:06 am
by Antonio Linares
lSalir = .F.

ACTIVATE DIALOG oDlg VALID lSalir

El diálogo no terminará con escape, ní intentándo cerrarlo, hasta que lSalir sea .T.

Posted: Sun Aug 12, 2007 4:45 pm
by metaldrummer
Antonio Linares wrote:lSalir = .F.

ACTIVATE DIALOG oDlg VALID lSalir

El diálogo no terminará con escape, ní intentándo cerrarlo, hasta que lSalir sea .T.
Está en lo correcto Antonio. Si te sirve te doy un pequeño ejemplo:

Code: Select all

DEFINE DIALOG oDlg RESOURCE "PRUEBA" OF oPadre
   REDEFINE BUTTON ID 301 OF oDlg ACTION ( oDlg:bValid:={ || .T.}, oDlg:End()) ;
         CANCEL

   ACTIVATE DIALOG oDlg CENTER VALID .F.
Te explico: al utilizar "VALID .F." en el ACTIVATE DIALOG, estamos indicando que aunque presiones la tecla ESC o presiones la X del diálogo, éste no se cerrará. Lo importante es que te fijes en lo que hace el botón.
En este caso saqué esto de un dialogo que utilizo desde recursos y ese botón cuando se presiona me aseguro que cambie el valor de oDlg:bValid que fue definida en el VALID del ACTIVATE DIALOG a .T. y luego le doy con el oDlg:End() la orden de que se cierre el diálogo.
Y como dice mi muy querido amigo Vikthor: "listo el pollo"
Saludos
David Lagos S.
Coquimbo-Chile

Posted: Sun Aug 12, 2007 7:33 pm
by Armando
Otra opción para evitar la tecla ESC sería

ACTIVATE DIALOG oDlg NOWAIT CENTERED VALID ! GetAsyncKey(VK_ESCAPE)

Saludos

Posted: Mon Aug 13, 2007 10:18 pm
by antolin
Yo utilizo una pequeña funcion:

FUNCTION _()
RETURN !( GetKeyStat( 27 ) )


La aplico así

ACTIVATE DIALOG oDlg VALID _()

ó si necesito otra validación

ACTIVATE DIALOG oDlg VALID IF(_(), <VALIDACION> ,.F.)

ó en una funcion:

ACTIVATE DIALOG oDlg VALID FuncionValidacion(...)

FUNCTION FuncionValidacion(...)
LOCAL lRet := _()
IF lRet
...
...
lRet := .T. ó .F.
...
...
ENDIF
RETRUN lRet

Me va muy bien

Saludos