4D v16

Eventos

Inicio

 
4D v16
Eventos

Eventos    


 

 

Además de las manipulaciones explicadas en el vídeo, también debe tener en cuenta que:

No todos los objetos tienen los mismos eventos: por ejemplo, no se puede seleccionar el evento "On Data Change" para un botón, ya que no puede "entrar" en su contenido (título).

Estos son algunos ejemplos:

  • On Mouse Enter
    Cuando el ratón entra en el "espacio aéreo" de un objeto.
  • On Data Change
    A la salida de un campo o una variable cuyo contenido ha cambiado.
    Esto se utiliza sobre todo para los controles de entrada, formato (mayúsculas y minúsculas), búsquedas, re cálculos.
  • On Clicked
    Cuando se hace clic en un objeto (principalmente botones, pop-ups, menús, etc.)
    También se pueden utilizar en objetos editables.
  • On Getting Focus
    El objeto acaba de recibir el foco (de On Clicked, se utiliza con la tecla tab o por programación).
  • On Load
    Justo antes de que un formulario se muestre en la pantalla o se utilice durante una impresión.
    Durante este evento generalmente se realiza la inicialización.
  • On Printing Detail
    Durante la impresión de registros.
    Permite, por ejemplo, definir un valor para las variables de total, concatenación.

Esta lista le ayudará a entender los eventos. Puede consultar la documentación de 4D para obtener una descripción completa de los eventos.

Hay un detalle importante que los  usuarios nuevos siempre preguntan: “¿Debo seleccionar los eventos de formulario o los eventos de objetos?” La respuesta es simple: todo depende de dónde va a crear su método.
El método formulario, en teoría, sólo debe contener lo que es relevante para procesar todo el formulario:

  • redimensionamiento
  • llamada exterior
  • visualización/ocultar objetos
  • etc.

Mientras que los métodos objeto deben contener lo que es específico a cada objeto  (botón, campo, etc.) Esa es la regla general y usted debe tener varias buenas razones antes de considerar romperla.

Recuerde:

  • Método formulario: centralizado, procesamiento global, fácil mantenimiento.
    Riesgo de ser ejecuto con más frecuencia de lo necesario.
  • Método objeto: específico, adaptado, ejecutado sólo cuando es necesario.
    Permite fácilmente mover un objeto utilizando copiar y pegar (sobre si utiliza punteros).
    Obliga a duplicar el método o llamar al método en cada objeto.

Lo que ocurre es que movemos ciertos procesos en el método formulario.

Por ejemplo, debe recalcular un valor en función de 10 parámetros editables. Para cada parámetro modificado, debe volver a realizar el cálculo. En lugar de poner la fórmula (o llamada de método) en cada uno de los 10 campos parámetros, es posible mover este cálculo en el método formulario.

En este caso, es más fácil y centralizado, sin embargo, es muy probable que el nuevo cálculo se efectúe con más frecuencia de lo necesario, especialmente durante la modificación de un área que no figura en el cálculo final.  (Nota: 4D permite saber cuál fue el objeto modificado para que podamos adaptar el cálculo de acuerdo con esta información).

Es importante saber el orden en que los eventos se ejecutan. Por ejemplo, para un botón, los eventos se ejecutan en el siguiente orden:

  • On Mouse Enter
  • On Mouse Move
  • On Getting Focus
  • On Clicked (if any)
  • On Mouse Leave
  • On Losing Focus

Un campo o una variable en donde se haga clic:

  • On Mouse Enter
  • On Mouse Move
  • On Getting Focus
  • On Data Change (if any)
  • On Losing Focus
  • On Mouse Leave

Para ahorra tiempo al escribir su código y hacerlo más confiable, recuerde configurar macros (archivo “macros.xml”).

Por ejemplo, puede crear una macro que escriba el siguiente código cuando digite “#$evt” en su método:

 $evt:=Form event
 Case of
    :($evt=On Data Change)
 
    :($evt=On Load)
 
 End case

Mientras esté aprendiendo a utilizar 4D, le recomendamos empezar por poner sus métodos en sus objetos, tendrá más flexibilidad para la actualización. Luego, comience por utilizar las llamadas de métodos genéricos y por último, cuando todo funcione correctamente, vea lo que puede pasar de los métodos objeto a su método formulario o métodos proyectos. A continuación, puede empezar a pasar punteros también.

Para ir más lejos:
Dé una buena mirada a cómo funcionan los eventos, ya que le permitirá entender exactamente cuándo ejecutar su programación. También encontrará una serie de ideas para dar poderosos primeros pasos utilizando eventos tales como:

  • On Drag Over
  • On Drop
  • On Selection Change
  • más los tres eventos ’On Mouse’ (Move, Leave, Enter)

y por supuesto los grandes clásicos:

  • On Clicked
  • On Double Clicked
  • On Long Click
  • etc.

En este vídeo, vamos a aprender el funcionamiento de los eventos y su programación.

Primero, vamos a diferenciar entre:

  • los eventos "formulario" que figuran en las propiedades del formulario
  • los eventos "de la base de datos" que se definen en la propiedades de una tabla, los eventos base asociados a los triggers, en otras palabras, la programación que se ejecuta cuando ocurre un evento específico.

Los eventos de formulario sólo se activan cuando se utiliza un formulario (en la pantalla o al imprimir), por lo tanto, cuando la interfaz está siendo utilizada por un usuario (clic, arrastrar y soltar, selección de elementos de un menú, teclado...).

Los eventos base sólo se refieren a 3 acciones que se realizan en los datos:

  • creación
  • modificación
  • eliminación.

Estos 3 eventos son interceptados por el motor de datos. Esto es importante ya que en modo cliente/servidor, el motor de datos se ejecuta en el servidor por lo que nunca va a ver un evento de base de datos ejecutarse en la máquina cliente. No podrá rastrearlo  desde un equipo cliente. Volveremos a los eventos de base de datos más adelante.

En primer lugar, vamos a divertirnos un poco y crear un botón un tanto "especial".

  • Vamos a la página 4 del formulario Navigation, página de las preferencias
  • Dibujamos un botón estándar
  • Modificamos sus propiedades:
  •      - el nombre del botón será bSpecial
  •      - Sólo el evento "On Mouse Enter" permanece seleccionado
  • y editamos el método del botón (Alt + clic en el botón)

introducimos el siguiente código:

  //Ubicación del ratón cuando inicia el método
 GET MOUSE($Mouse_H;$Mouse_V;$MouseButton//Donde está el objeto en la ventana
 OBJECT GET COORDINATES(bSpecial;$Obj_L;$Obj_T;$Obj_R;$Obj_B)
 
  //Calculemos el centro del objeto
 $Center_H:=$Obj_L+(($Obj_R-$Obj_L)/2)
 $Center_V:=$Obj_T+(($Obj_B-$Obj_T)/2)
 
 $Shift:=10 //Planear un desplazamiento adicional de X píxeles
 
 If($Mouse_H<$Center_H//Si el ratón está a la izquierda del centro
    $T:=$Mouse_H-$Obj_L+$Shift  //Mover el objeto a la derecha
 Else //El ratón está a la derecha del centro
    $T:=-($Obj_R-$Mouse_H+$Shift//Mover el objeto a la izquierda
 End if

 If($Mouse_V<$Center_V//Si el ratón está arriba del centro
    $B:=$Mouse_V-$Obj_T+$Shift  //Mover hacia abajo
 Else //El ratón está debajo del centro
    $B:=-($Obj_B-$Mouse_V+$Shift//Mover hacia arriba
 End if
 
  //Mover el botón de acuerdo a la información definida arriba
 OBJECT MOVE(bSpecial;$T;$B)

lo que significa que:

  • calculamos a la posición del ratón
  • la posición del objeto (el botón) para determinar su centro
  • planeamos mover el objeto un cierto número de píxeles
  • y a continuación vamos a calcular dónde está el ratón con respecto al centro del botón, horizontal y verticalmente
  • a continuación, podemos simplemente mover la posición del botón

Veamos lo que esto nos da:

  • Mostramos el formulario (usando el método Navigation)
  • Vamos a la página de preferencias
  • Y tratamos de hacer clic en el botón.

Cada vez que nos acercamos al botón, se mueve en la dirección opuesta (izquierda, derecha, arriba o abajo).

Si el botón se sale de la pantalla, cerramos el formulario y empezamos de nuevo, el botón volverá a aparecer en su posición inicial.

Ese fue un ejemplo del uso de eventos.

Demos un vistazo a otro ejemplo: durante la entrada de una intervención, queremos calcular su duración basados en la información introducida en la hora de inicio y final.

Tendremos que:

  • primero añadir el campo End time a la tabla.
    Para ahorrar tiempo, copiamos el campo Time y lo pegamos en la tabla y luego cambiamos su nombre.
  • A continuación vamos a añadirlo al formulario de entrada duplicando el campo de hora de inicio y adaptando el campo correspondiente: hora de intervención final.
  • Hay que añadir la duración para verificar que nuestra programación funciona correctamente.
  • A continuación, debemos indicar que la duración debe ser recalculada cuando uno de los campos de hora se modifique.
  • Seleccionamos el evento "On Data Change" e indicamos el cálculo a efectuar.
    Atención: ALT-Clic en 2 objetos que no tienen los métodos crea el método sólo para el objeto en el que se hizo clic.

La duración se recalculará como la diferencia entre la hora final menos la hora de intervención, con la condición de que el tiempo final se llene (en otras palabras, que no sea cero).

Ahora podemos copiar el código y crear el método de hora de final.

Cuando la vamos a modificar: la hora de intervención debe llenarse y el cálculo de la duración siempre será el mismo.
Por supuesto, vamos a comprobar que las horas sean editables y luego vamos a probar en una intervención:

  • Tomamos todas las intervenciones,
  • Luego tomamos la primera
  • Introducimos 14:00 y tenemos una duración de 2 horas que se calcula
  • de 12:00 a 17:30 => 5:30
  • Si empezamos a las 14:00, entonces tenemos una duración de 3:30

La programación fue realizada realmente cuando salimos del campo, en otras palabras, en el contexto del evento "On Data Change".

En la siguiente sección, vamos a tratar la programación de arrays.

 
 

 
PROPIEDADES 

Producto: 4D
Tema: Eventos

 
HISTORIA 

 
ARTICLE USAGE

Autoformación ( 4D v16)