Finalizar proceso tecla ESC

HMG en Español

Moderator: Rathinagiri

Post Reply
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Finalizar proceso tecla ESC

Post 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
franco
Posts: 889
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Finalizar proceso tecla ESC

Post 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
All The Best,
Franco
Canada
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: Finalizar proceso tecla ESC

Post 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!!!
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Finalizar proceso tecla ESC

Post 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
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Finalizar proceso tecla ESC

Post 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
franco
Posts: 889
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Finalizar proceso tecla ESC

Post 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
All The Best,
Franco
Canada
franco
Posts: 889
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Finalizar proceso tecla ESC

Post 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
All The Best,
Franco
Canada
Post Reply