¿Cómo atrapar la señal que ha provocado la ejecución de un evento?
En un artículo anterior (Manejando eventos en un formulario) os hemos hablado de cómo podemos interactuar con la interfaz de determinados objetos tales como formularios, rejillas, etc. mediante el uso de las conexiones de evento y los eventos. En este capítulo os explicaré de qué forma podemos atrapar en un evento la señal que lo ha disparado.
Las señales pueden ser leídas en los eventos que éstas disparen. Para ello será necesario crear una variable local al objeto (formulario, rejilla, marco, etc.) cuyo identificador sea EVENT_PARAMS, ésta tendrá que ser de tipo alfabético y tener activada la propiedad array. En la tabla siguiente se muestran las distintas señales disponibles y qué es lo que devuelven en cada posición del array:

(Pulsa sobre la imagen para ampliarla)
Podremos leer el contenido del array desede cualquier fórmula, siguiendo la siguiente sintaxis: EVENT_PARAMS[posicion], donde el parámetro posicion identifica la posición del array que se desee leer. Este dato podrá ser tanto una constante como una variable. Como puede verse en la tabla anterior, en un array la primera posición es la 0. En este caso, todas las señales devuelven en la primera posición el código del comando. Lo devuelto en las posiciones siguientes dependerá del tipo de señal.
Las señales de tecla pulsada lo que devuelven es:
Tecla: Código ASCII la tecla pulsada.
Shift?, Control? y Alt?: Para detectar si la tecla fue pulsada en combinación con las teclas Shift, Control y/o Alt, respectivamente. Devolverá 1 si la tecla Shift, Control y/o Alt fue pulsada y 0 si no lo fue.
Texto: Texto de la tecla pulsa. Ejemplo, si se ha pulsado la tecla “A”, devolverá “A”.
Las señales de ratón devuelven:
Botón: Devolverá 1 si el botón pulsado es el izquierdo y 2 si es el derecho.
Shift?, Control? y Alt?: Para detectar si lel botón fue fue pulsado en combinación con las teclas Shift, Control y/o Alt, respectivamente. Devolverá 1 si la tecla Shift, Control y/o Alt fue pulsada y 0 si no lo fue.
Pos X y Pos Y: Posición (X e Y) dentro de la ventana donde estaba el cursor cuando el botón fue pulsado.
Pos X y Pos Y Global: Posición (X e Y) de la pantalla donde estaba el cursor cuando el botón fue pulsado.
La señal de ventana movida devuelve:
Old Pos X y Old Pos Y: Posición (X e Y) anterior de la venana.
Pos X y Pos Y: Nueva posición (X e Y) de la venana.
La señal de ventana redimensionada devuelve:
Old anchura X y Old altura: Altura y anchura anterior de la venana.
Nueva anchura, Nueva altura: Nuevas dimensiones de la ventana.
Las señales de Item devuelven:
Index fila e Index columna: Celda (fila y columna) del ítem que ha activado la señal.



Por eic #
Hola.
Nos lo vamos a pasar en grande…
Saludos,
Fran Varona
Por contactar #
Buenas, mi duda es la siguiente:
¿Para cuándo la versión vServer a nivel local?
Saludos…
Por fjpnovo #
Buenas tardes:
Entendido.
Un saludo,
Fran.
Por fjpnovo #
Se ve muy bien.. ya quiero empezar a programr en V7.. seguro que será algo genial…
Por info #
Hola, entendido.
¿ Podríamos con esta particularidad disponer de un LOG para disponer de él para por ejemplo realizar demos ?
Simplemente sería ejecutar la aplicación obedeciendo a las pulsaciones de teclas según LOG asignado.
Podría se una propiedad del mapa proyecto, que generase el LOG en tiempo de ejecución.
Antonio Vela
velavisual
Por rcueto #
A Antono Vela Visual:
Simplemente aclarar que esto lo que nos permite es atrapar señales, no simular pulsaciones de teclado.
Un saludo.
Por mivimu #
Supongamos que varias conexiones de eventos nos llevan al mismo evento.
¿Es posible al programar el evento saber que control lo ha disparado?
es decir si ha ganado el foco el campo1 o el campo2 o el campo3…
Se que podría programar eventos distintos para cada conexion pero por no repetir el códgo básico me interesaría saber la conexión o el control que ha disparado la señal.
Por mivimu #
Creo que seria interesante que desde un evento pudiera llamarse a otro evento al igual que con los procesos.
Un saludo.
Por rcueto #
Hola, mivimu:
Tomo nota de tus sugerencias.
No obstante, referido a tu segunda sugerencia, desde un evento puedes llamar a un proceso por lo que podrías crear un único proceso y llamarlo desde distintos eventos.
Muchas gracias.
Un saludo.