En el siguiente ejemplo se crea un diálogo que contiene un radio y dos botones: uno para seleccionar y el otro para cancelar la tarea sin que se procese nada posterior al diálogo. Es decir, lo que sigue después del diálogo sólo debe procesarse si se pulsa sobre el botón "Select".
La variable lSelecc se inicializa como .F. y solamente cambiará a .T, si se pulsa el botón "Select".
En otras palabras, si se cierra el diálogo con cualquiera de las cuatro opciones difentes a "Select" y que son: 1.- Tecla ESC, 2.- pulsar sobre el botón "Cancel", 3.- dar click sobre la "X" en la esquina superior derecha del diálogo, y 4.- Pulsar las teclas ALT+F4 para cerrar el diálogo, la variable "lSelecc" debería permanecer en .F.
Esta condición se cumple en los tres _, pero falla en el 4 (ALT+F4) que pone la variable en .T. como si se hubiese pulsado sobre el botón "Select".
Esto pasa únicamente con la clase TBTNBMP . Con las demás clases para manejo de botones todo va bien.
¿ Cómo puedo solucionarlo o qué debo corregir en la clase ? Me urge resolverlo pues el proceso en el que se involucra este escenario es altamente sensible para la integridad de los datos del cliente.
Gracias anticipadas por su extraordinaria ayuda
Code: Select all
#include "FiveWin.ch"
Function Main()
LOCAL oDlg, oBtn1, oBtn2, oRad, nOpr:=1
LOCAL lSelecc:=.F. , lNoEsc := .T.
LOCAL aItems := {"Opcion 1","Opcion 2","Opcion 3","Opcion 4","Opcion 5"}
DEFINE DIALOG oDlg FROM 0,0 TO 176,245 PIXEL TITLE "Documentos a Reversar" TRANSPARENT
@ 05, 30 SAY "Seleccione tipo documento:" OF oDlg PIXEL SIZE 100,08
oRad := TRadMenu():New( 15,25,aItems,{|u|If(PCount()==0,nOpR,nOpR:=u)}, oDlg,,,,,,.F.,, 70 , 09,,.F.,.F.,.T.)
@ 68,08 BTNBMP oBtn1 PROMPT "&Select" ACTION ( lNoEsc := .T. , lSelecc:=.T. , oDlg:End()) OF oDlg SIZE 48,14 PIXEL;
LEFT NOBORDER
@ 68,67 BTNBMP oBtn1 PROMPT "&Cancel" ACTION ( lNoEsc := .T. , lSelecc:=.F. , oDlg:End()) OF oDlg SIZE 48,14 PIXEL;
LEFT NOBORDER
ACTIVATE DIALOG oDlg CENTERED VALID lNoEsc
if lSelecc
MsgInfo(nOpr) // <=== *** ESTO DEBE PROCESARLO SI, Y SÓLO SI, SE PULSA SOBRE EL BOTÓN "Select". *** //
endif
Return(NIL)