Hola:
¿Existe alguna funcion que controle que se ha pulsado una tecla (ejemplo ESC)?
Es para detener un proceso DO WHILE/END WHILE o FOR/NEXT en cualquier momento.
Gracias de antemano por la ayuda.
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Control de pulacion de teclas
Control de pulacion de teclas
--
Un saludo
Alfonso
Un saludo
Alfonso
Re: Control de pulacion de teclas
el evento OnKeyDown() del control o ventana donde quieras que se "capture" esa pulsación de tecla...
Recibe/manda los siguientes parámetros... ( oSender, nKey, nFlags )
Luego, comprueba el valor de nKey con la tecla que necesites controlar, y le mandas hacer lo que pretendes.
...
If nKey == VK_ESCAPE
MsgInfo( "Se ha pulsado la tecla Escape <Esc>" )
Return 0
...
Recibe/manda los siguientes parámetros... ( oSender, nKey, nFlags )
Luego, comprueba el valor de nKey con la tecla que necesites controlar, y le mandas hacer lo que pretendes.
...
If nKey == VK_ESCAPE
MsgInfo( "Se ha pulsado la tecla Escape <Esc>" )
Return 0
...
Un Saludo,
Xevi.
Xevi.
Re: Control de pulacion de teclas
Gracias Xevi por responder tan rapido.
La idea es salir de un bucle, he probado con la funcion LastKey() de Harbour pero no funciona.
METHOD Button1Click( oSender ) CLASS TFrmPrueba
Local i:=1
Local suma:=1
DO WHILE i<=10000
IF LASTKEY() == VK_ESCAPE
EXIT // Continua despues del buble
ENDIF
suma++
ENDDO
MgInfo("Salido del bucle","Aviso")
RETURN Nil
La idea es salir de un bucle, he probado con la funcion LastKey() de Harbour pero no funciona.
METHOD Button1Click( oSender ) CLASS TFrmPrueba
Local i:=1
Local suma:=1
DO WHILE i<=10000
IF LASTKEY() == VK_ESCAPE
EXIT // Continua despues del buble
ENDIF
suma++
ENDDO
MgInfo("Salido del bucle","Aviso")
RETURN Nil
--
Un saludo
Alfonso
Un saludo
Alfonso
Re: Control de pulacion de teclas
Lo encontre
METHOD Button1Click( oSender ) CLASS TFrmPrueba
Local i:=1
local suma:=1
DO WHILE i<=10000
IF lGetAsyncKeyState( VK_ESCAPE )
EXIT // sale del bucle
ENDIF
suma++
ENDDO
MsgInfo("Finalizo")
RETURN Nil
Por si le sirve a alguien que busque lo mismo.
METHOD Button1Click( oSender ) CLASS TFrmPrueba
Local i:=1
local suma:=1
DO WHILE i<=10000
IF lGetAsyncKeyState( VK_ESCAPE )
EXIT // sale del bucle
ENDIF
suma++
ENDDO
MsgInfo("Finalizo")
RETURN Nil
Por si le sirve a alguien que busque lo mismo.
--
Un saludo
Alfonso
Un saludo
Alfonso
- ignacio
- Site Admin
- Mensajes: 9252
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Control de pulacion de teclas
Buenos días,
La forma correcta es poner un botón de Cancelar, que simplemente en el evento OnClick ponga una propiedad lStop a .T. . Para que funcione correctamente hay que llamar a la propiedad ProcessMessages() en el bucle y hacer que éste dependa de esa propiedad. Algo así:
Precauciones:
1) Hacer que el botón sea el único botón habilitado mientras se ejecute el bucle.
2) Evitar que se pueda salir del formulario capturando el evento OnClose() y en él simplemente poner la propiedad lStop a .T.
Mejoras:
1) Utilizar una propiedad adicional lWorking mientras se está en el bucle. Esto permite saber en el evento OnClose del formulario, si se está dentro o no del bucle.
Saludos
La forma correcta es poner un botón de Cancelar, que simplemente en el evento OnClick ponga una propiedad lStop a .T. . Para que funcione correctamente hay que llamar a la propiedad ProcessMessages() en el bucle y hacer que éste dependa de esa propiedad. Algo así:
Código: Seleccionar todo
DO WHILE !::lStop .AND. .......
ProcessMessages()
......
ENDDO
1) Hacer que el botón sea el único botón habilitado mientras se ejecute el bucle.
2) Evitar que se pueda salir del formulario capturando el evento OnClose() y en él simplemente poner la propiedad lStop a .T.
Mejoras:
1) Utilizar una propiedad adicional lWorking mientras se está en el bucle. Esto permite saber en el evento OnClose del formulario, si se está dentro o no del bucle.
Saludos