Page 1 of 1
Finalizar proceso tecla ESC
Posted: Fri Jul 29, 2022 3:55 pm
by jparada
Hola,
Con el siguiente código intento dar oportunidad al usuario de finalizar el proceso utilizando la tecla ESC, pero una vez que el usuario presiona la tecla ESC y confirma que desea finalizar, el proceso sí se detiene, pero me gustaría que saliera del form y no ocurre supongo por el BREAK pero no sé cómo solucionar, alguna idea?.
Code: Select all
LOCAL lBreak := .F.
ON KEY ESCAPE OF win1 ACTION lBreak := MsgYesNo( "Finalizar Proceso?", "Confirmar" )
cTime := Time()
BEGIN SEQUENCE
FOR EACH cXmlFile IN aFiles
IF hb_vfExists( cXmlFileName := cXmlFile[ F_NAME ] )
oCFDI:Load( cXmlFileName )
//win1.label1.Value := "Leyendo archivo " + hb_NToS(i) + " de " + hb_NtoS(nLenDir)
progressValue = (i * 100) / nLenDir
SetProperty ( "win1", "progressbar1", "Value", progressValue )
i++
DO EVENTS
IF lBreak == .T.
BREAK
win1.Release()
ENDIF
NEXT
END
Saludos,
Javier
Re: Finalizar proceso tecla ESC
Posted: Sat Jul 30, 2022 4:33 pm
by franco
Jparada, Try This
Code: Select all
Private lBreak
DEFINE WINDOW
ON KEY ESCAPE ACTION {|| {IIF( MSGYESNO("Finalizar Proceso?"),{Something()},{NIL})}, {IIF(lBreak == .T.,{ThisWIndow.Release}, {NIL})}}
END WINDOW
Function Something
************************* PUT YOU CODE HERE *** A SIMPLE FOR NEXT LOOP
************************* I Added this for you to try.
If MSGYESNO("Do You Wish to lBreak")
lBreak := .T.
Else
lBreak := .F.
endif
return
Franco
Re: Finalizar proceso tecla ESC
Posted: Mon Aug 01, 2022 6:53 am
by SALINETAS24
jparada wrote: ↑Fri Jul 29, 2022 3:55 pm
Hola,
Con el siguiente código intento dar oportunidad al usuario de finalizar el proceso utilizando la tecla ESC, pero una vez que el usuario presiona la tecla ESC y confirma que desea finalizar, el proceso sí se detiene, pero me gustaría que saliera del form y no ocurre supongo por el BREAK pero no sé cómo solucionar, alguna idea?.
Code: Select all
LOCAL lBreak := .F.
ON KEY ESCAPE OF win1 ACTION lBreak := MsgYesNo( "Finalizar Proceso?", "Confirmar" )
cTime := Time()
BEGIN SEQUENCE
FOR EACH cXmlFile IN aFiles
IF hb_vfExists( cXmlFileName := cXmlFile[ F_NAME ] )
oCFDI:Load( cXmlFileName )
//win1.label1.Value := "Leyendo archivo " + hb_NToS(i) + " de " + hb_NtoS(nLenDir)
progressValue = (i * 100) / nLenDir
SetProperty ( "win1", "progressbar1", "Value", progressValue )
i++
DO EVENTS
IF lBreak == .T.
BREAK
win1.Release()
ENDIF
NEXT
END
Saludos,
Javier
Hola Javier, tienes dos posibles soluciones.
1/ Cambia el orden
Code: Select all
IF lBreak == .T.
win1.Release()
BREAK
ENDIF
2/ Al finalizar el BEGIN SEQUENCE
Code: Select all
.../...
DO EVENTS
IF lBreak == .T.
BREAK
win1.Release()
ENDIF
NEXT
END
IF lBreak == .T.
win1.Release()
ENDIF
Saludos cordiales y cervecita bien fresquita!!!
Re: Finalizar proceso tecla ESC
Posted: Wed Aug 03, 2022 1:58 pm
by jparada
SALINETAS24 wrote: ↑Mon Aug 01, 2022 6:53 am
Hola Javier, tienes dos posibles soluciones.
1/ Cambia el orden
Code: Select all
IF lBreak == .T.
win1.Release()
BREAK
ENDIF
2/ Al finalizar el BEGIN SEQUENCE
Code: Select all
.../...
DO EVENTS
IF lBreak == .T.
BREAK
win1.Release()
ENDIF
NEXT
END
IF lBreak == .T.
win1.Release()
ENDIF
Saludos cordiales y cervecita bien fresquita!!!
Hola José, a menos que no te haya entendido, pero me despliega error si lo intento como comentas.
Saludos,
Javier
Re: Finalizar proceso tecla ESC
Posted: Wed Aug 03, 2022 2:00 pm
by jparada
franco wrote: ↑Sat Jul 30, 2022 4:33 pm
Jparada, Try This
Code: Select all
Private lBreak
DEFINE WINDOW
ON KEY ESCAPE ACTION {|| {IIF( MSGYESNO("Finalizar Proceso?"),{Something()},{NIL})}, {IIF(lBreak == .T.,{ThisWIndow.Release}, {NIL})}}
END WINDOW
Function Something
************************* PUT YOU CODE HERE *** A SIMPLE FOR NEXT LOOP
************************* I Added this for you to try.
If MSGYESNO("Do You Wish to lBreak")
lBreak := .T.
Else
lBreak := .F.
endif
return
Franco
Hi Franco,
In this way I would have to change the code sequence I currently have a bit, so... I keep validating.
Regards,
Javier
Re: Finalizar proceso tecla ESC
Posted: Wed Aug 03, 2022 3:54 pm
by franco
Javier,
I do not understand your code. Mine was just an example. I have found releasing a window when from another function or procedure
can sometimes cause problems so I never release until I return. I do not know where you get lbreak in your code.
Maybe because lbreak is a private variable try.
Code: Select all
Private lBreak
DEFINE WINDOW
ON KEY ESCAPE ACTION {|| {IIF( MSGYESNO("Finalizar Proceso?"),{Something()},{NIL})}, {IIF(lBreak == .T.,{ThisWIndow.Release}, {NIL})}}
END WINDOW
Function Something
***** ************************YOUR CODE HERE
DO EVENTS
IF lBreak == .T.
**? BREAK
Return
*************** win1.Release()
ENDIF
NEXT
END
lBreak := .T.
Return
Re: Finalizar proceso tecla ESC
Posted: Thu Aug 04, 2022 5:30 pm
by franco
Maybe,
Code: Select all
Private lBreak
DEFINE WINDOW
ON KEY ESCAPE ACTION {|| {IIF( MSGYESNO("Finalizar Proceso?"),{Something()},{NIL})}, {IIF(lBreak == .T.,{ThisWIndow.Release}, {NIL})}}
END WINDOW
Function Something
Local cTime, progressValue
cTime := Time()
BEGIN SEQUENCE
FOR EACH cXmlFile IN aFiles // Or Maybe ? FOR A = 1 TO nLenDir
IF hb_vfExists( cXmlFileName := cXmlFile[ F_NAME ] )
oCFDI:Load( cXmlFileName )
//win1.label1.Value := "Leyendo archivo " + hb_NToS(i) + " de " + hb_NtoS(nLenDir)
progressValue = (i * 100) / nLenDir
SetProperty ( "win1", "progressbar1", "Value", progressValue )
i++
DO EVENTS
IF lBreak == .T.
RETURN // BREAK
ENDIF * win1.Release()
NEXT
END
lBreak := .T.
RETURN