Keystroke

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 6.0


Keystroke Alfa

ParámetroTipoDescripción
Este comando no necesita parámetros
ResultadoAlfaCará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 tecleo 
permite 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.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente