versión 6.0
Keystroke Alfa
Parámetro | Tipo | Descripción | ||||
Este comando no necesita parámetros | ||||||
Resultado | Alfa | Carácter introducido por el usuario |
Descripción
Keystroke devuelve el carácter introducido por el usuario en un campo o en un área editable.
Generalmente, usted llama a Keystroke en un método de formulario o de objeto durante la gestión del evento de formulario On Before Keystroke. Para detectar eventos de tecleo, utilice el comando Form event.
Para reemplazar el carácter introducido por el usuario con otro carácter, utilice el comando FILTER KEYSTROKE.
Nota: La función Keystroke no funciona en subformularios.
IMPORTANTE: Si quiere efectuar algunas operaciones "al vuelo" dependiendo del valor actual del área de entrada que está siendo editada, así como del nuevo carácter a introducir, recuerde que el texto que ve en la pantalla NO ES aún el valor del campo o de la variable fuente. El valor del campo o de la variable fuente de datos se asigna después de que se valida la entrada de datos para el área (tabulación en otra área, clic en un botón, etc). Por lo tanto depende de usted el colocar los datos introducidos en una variable y luego trabajar con el valor de la variable. Debe hacer esto si necesita saber el valor actual del texto para efectuar acciones especiales. Igualmente puede utilizar la función Get edited text.
Puede utilizar el comando Keystroke para:
efectuar un filtro personalizado de caracteres
crear un filtro de entrada no disponible en estándar, por ejemplo en los filtros de entrada
implementar áreas dinámicas de búsqueda o de tecleo anticipado
Ejemplos
1. Consulte los ejemplos del comando FILTER KEYSTROKE.
2. Cuando procesa un evento On Before Keystroke, usted está administrando la edición del área de texto actual (donde se encuentra el cursor), no el "valor futuro" de la fuente de datos (campo o variable) de esta área. El método de proyecto
Manejo tecleopermite colocar en una segunda variable los datos introducidos en un área de texto, de manera que usted puede utilizar esta variable para efectuar diferentes acciones mientras introduce caracteres en el área. Usted pasa como primer parámetro un puntero hacia la fuente de datos del área, y como segundo parámetro un puntero hacia la segunda variable. El método devuelve el nuevo valor del área de texto en la segunda variable, y devuelve True si este valor es diferente del valor antes de la entrada del último carácter.
` Método de proyecto Manejo tecleo ` Manejo tecleo ( Puntero ; Puntero ) -> Booleano ` Manejo tecleo ( -> srcArea ; -> curValor ) -> Es un nuevo valor C_POINTER ($1;$2) C_TEXT ($vtNuevoValor) ` Obtener el texto seleccionado en el área editable GET HIGHLIGHT ($1->;$vlInicio;$vlFin) ` Comenzar a trabajar con el valor actual $vtNuevoValor:=$2-> ` Dependiendo de la tecla presionada o del carácter introducido, ` Realizar las acciones apropriadas Case of ` La tecla Retroceso ha sido presionada : (Character code(Keystroke)=Backspace ) ` Suprimir los caracteres seleccionados o el carácter a la izquierda del cursor $vtNuevoValor:=Substring ($vtNuevoValor;1;$vlInicio-1-Num($vlInicio=$vlFin)) +Substring($vtNuevoValor;$vlFin) ` Un carácter aceptable ha sido introducido : (Position (Keystroke;"abcdefghjiklmnopqrstuvwxyz -0123456789")>0) If ($vlInicio#$vlFin) ` Uno o varios caracteres son seleccionados, el keystroke va a borrarlos $vtNuevoValor:=Substring($vtNuevoValor;1;$vlInicio-1) +Keystroke+Substring($vtNuevoValor;$vlFin) Else ` La selección de texto es el cursor Case of ` El cursor está actualmente al comienzo del texto : ($vlInicio<=1) ` Inserción del carácter al principio del texto $vtNuevoValor:=Keystroke+$vtNuevoValor ` El cursor está actualmente al final del texto : ($vlInicio>=Length($vtNuevoValor)) ` Añadir el carácter al final del texto $vtNuevoValor:=$vtNuevoValor+Keystroke Else ` El cursor se encuentra en el texto, insertar el nuevo carácter $vtNuevoValor:=Substring($vtNuevoValor;1;$vlInicio-1)+Keystroke +Substring($vtNuevoValor;$vlInicio) End case End if ` Una tecla flecha ha sido presionada ` No haga nada, sólo acepte el carácter tecleado : (Character code(Keystroke)=Left Arrow Key ) : (Character code(Keystroke)=Right Arrow Key ) : (Character code(Keystroke)=Up Arrow Key ) : (Character code(Keystroke)=Down Arrow Key ) ` Else ` No acepte caracteres diferentes de letras, dígitos, espacios y guiones FILTER KEYSTROKE ("") End case ` ¿Es diferente el valor ahora? $0:=($vtNuevoValor#$2->) ` Devolver el valor para la gestión del próximo keystroke $2->:=$vtNuevoValor
Una vez este método de proyecto se añada a su aplicación, puede utilizarlo de la siguiente forma:
` Método de objeto del área de entrada MiObjeto Case of : (Form event=On Load) MiObjeto:="" MiObjetoCaché:="" : (Form event=On Before Keystroke) If (Manejo tecleo (->MiObjeto;->MiObjetoCaché)) ` Efectuar las acciones apropiadas utilizando el valor almacenado en MiObjetoCaché End if End case
Examinemos por ejemplo el siguiente formulario:
Esta compuesto de los siguientes objetos: un área editable vsBusqueda, un área no editable vsMensaje, y un área de desplazamiento asBusqueda. Durante la entrada de caracteres en vsBusqueda, el método para ese objeto efectúa una búsqueda en la tabla [Codigos postales], permitiendo al usuario encontrar ciudades solamente presionando los primeros caracteres de los nombres de la ciudades.
Este es el método de objeto vsBusqueda:
` Método de objeto del área de entrada vsBusqueda Case of : (Form event=On Load ) vsBusqueda:="" vsResult:="" vsMensaje:="Introduzca los primeros caracteres de la ciudad que busca." CLEAR VARIABLE(asBusqueda) : (Form event=On Before Keystroke ) If (Manejo tecleo (->vsBusqueda;->vsResult)) If (vsResult#"") QUERY([Codigos postales];[Codigos postales]Ciudad=vsResult+"@") MESSAGES OFF DISTINCT VALUES([Codigos postales]Ciudad;asBusqueda) MESSAGES ON $vlResult:=Size of array(asBusqueda) Case of : ($vlResult=0) vsMensaje:="No se encontró ninguna ciudad." : ($vlResult=1) vsMensaje:="Se encontró una ciudad." Else vsMensaje:=String($vlResult)+" ciudades encontradas." End case Else DELETE FROM ARRAY(asBusqueda;1;Size of array(asBusqueda)) vsMensaje:="Introduzca los primeros caracteres de la ciudad que está buscando." End if End if End case
Este es el formulario en ejecución:
Utilizando las habilidades de la comunicación interproceso de 4D, puede construir interfaces de usuario en las cuales las características de búsqueda se ofrezcan en ventanas flotantes que se comuniquen con procesos en los cuales los registros son listados o editados.
Ver también
FILTER KEYSTROKE, Form event, Get edited text.