4D v14

Script del vídeo

Inicio

 
4D v14
Script del vídeo

Script del vídeo  


 

 

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

 
ARTICLE USAGE

Autoformación ( 4D v13)
Autoformación ( 4D v14)