4D v16

Arrays, pop-ups, list boxes

Inicio

 
4D v16
Arrays, pop-ups, list boxes

Arrays, pop-ups, list boxes    


 

 

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

Los arrays son una de las características indispensables en 4D.

Prácticos, ilimitados, dinámicos, de una o dos dimensiones, son un espacio en memoria que se puede mostrar en los formularios por intermedio de objetos (pop-ups, combo boxes, list boxes, áreas de desplazamiento, etc.)

Ya hemos tratado el concepto y el uso de variables con un solo valor. Un array es una variable con varios valores donde se puede leer o escribir cada uno de sus elementos.

Definimos un array por el número de líneas que contiene y su tipo. Este gráfico muestra las diferentes etapas de una variable y el ciclo de la vida de un array:

EtapaVariable simpleVariable array
InicializaciónC_TEXT(vText)ARRAY TEXT(ArrayText;10) `10 líneas
ValorizaciónvText:="Tascher de la Pagerie"ArrayText{1}:="De Beauharnais" `línea 1
ArrayText{2}:="Barras" `línea 2
ArrayText{3}:="Bonaparte" `línea 3
...
Uso$NumChar:=Length(vText)$Amant:=ArrayText{1}
Borrar el contenidoCLEAR VARIABLE(vText)ARRAY TEXT(ArrayText;0)
(el comportamiento es diferente entre una aplicación interpretada y compilada,
ver la documentación 4D)
Visualización en un formularioDa el nombre de la variable a un objeto de tipo área de desplazamiento,Dar el nombre de la variable a un objeto de tipo área de desplazamiento/menú pop-up
TiposEntero, Entero largo, Numérico, Alfa, Texto, Booleano, Fecha, Hora, Imagen, BLOB, punterosIdénticos a los tipos de variables excepto Hora y BLOB

Como puede ver, hay un número de similaridades entre las dos.

El nombre del array se utiliza a veces con llaves {}, a veces solo. En este caso, se trata de una variable (entero largo) creada automáticamente por 4D.

Esta variable, asociada al array, sirve como un índice (número de línea) de array. Es a través de esta variable que podemos saber que línea fue seleccionada por el usuario o forzar las selección de una línea específica en el menú pop-up.

Esta es razón por la que verá a menudo esta sintaxis concisa escrita en la base de datos:

 [INTERVENTIONS]Object:=ObjectsArr{ObjectsArr}

que podemos descifrar de la siguiente manera: "Object := contenido del array {en la línea seleccionada}"
También encontrará, aunque más concisa y mucho más genérica, esta sintaxis que utiliza el comando Self (puntero al objeto cuyo método se está ejecutando):

 [INTERVENTIONS]Object:=Self->{Self->}

Independientemente de la sintaxis utilizada, el funcionamiento es el mismo.

En 4D, una pestaña es un objeto único, con varios títulos (valores). Este es un ejemplo de un objeto de interfaz que puede representar un array.

Por lo general, ponemos las pestañas en la página 0 del formulario (ver la sección cubre este punto).

Notará que los arrays se vuelven muy útiles rápidamente, de hecho, pronto se convierten en una necesidad.

Un array sólo contiene elementos del mismo tipo. No puede tener un array con un elemento Alfa, un elemento Fecha y un tercer elemento Hora.En este caso, puede utilizar un array de punteros que apunten a variables de diferentes tipos.

Como se mencionó en la lección sobre los punteros, se pueden combinar punteros y arrays para obtener "arrays de punteros".

También puede considerar que un list box es una serie de arrays conectados (de la misma dimensión X).

Es un objeto que agrupa y sincroniza uno o más arrays.

En un list box, puede configurar:

  • el list box mismo
  • cada encabezado de columna
  • y cada columna

En total, si el list box tiene X columnas, usted tiene 2X+1 objetos (X columnas, X encabezados + 1 list box).

Los list boxes permiten:

  • introducir datos
  • ordenar y mover líneas y columnas
  • mostrar colores alternos
  • la visualización jerárquica
  • añadir totales a los pies de página
  • Un list box se puede sincronizar con arrays como lo hicimos aquí o con campos de la selección actual (o una selección temporal) de una tabla
  • ...

Tenga en cuenta que el list box sincroniza sus columnas, toma el menor número de líneass de los arrays que lo componen.

Este punto es importante de recordar, ya que podría tener arrays que están llenos de datos y aún así terminar con un list box vacío si uno de sus arrays está vacío.

En este vídeo, vamos a aprender a crear y programar arrays así como también los objetos que podemos utilizar para que representarlos en las formularios.

Al igual que una variable simple, un array debe:

  • declararse
  • asignársele un valor
  • y luego utilizarlo.

Para ayudarnos a entender esto, vamos a crear un primer array en el formulario DETAIL de la tabla INTERVENTIONS.

Este array concierne a los objetos.
Debemos entonces:

  1. Crear el array en memoria
  2. Poner un objeto en el formulario que puede representar este array en memoria
  3. Verificar que el array contiene la información correcta
  4. Luego, cuando se selecciona un valor en el array, transferimos este valor al campo

Para simplificar las cosas, vamos a poner toda la programación en el objeto. Esto también nos permitirá revisar el concepto de evento.

  • Seleccionamos el objeto popup/lista desplegable
  • Luego, trazar a la derecha del campo OBJECT.
  • Lo llamamos PopObjects
  • Seleccionamos los eventos On Load y On Clicked
  • A continuación editamos el método.

 $evt:=Form event
 Case of
    :($evt=On Load//antes de la visualización del formulario
       ARRAY TEXT(PopObjects;5) //Definición del array (tipo, nombre y número de elementos)
 
  //Llenado de los elementos del array
       PopObjects{1}:="Training"
       PopObjects{2}:="Software"
       PopObjects{3}:="Hardware"
       PopObjects{4}:="System"
       PopObjects{5}:="System"
 
    :($evt=On Clicked//cuando el usuario selecciona un elemento en el array
       If(PopObjects#0) //si el usuario selecciona un elemento
          $ChosenElement:=PopObjects //se guarda el elemento seleccionado
          $ChosenValue:=PopObjects{$ChosenElement//guardamos el valor contenido en este elemento
          [Interventions]Object:=$ChosenValue  //asignamos el valor al campo
       End if
 End case

El método objeto se compone de un cierto número de elementos:

  • Inicialmente, la prueba del evento.
  • Si se trata de "On Load", creamos un array de 5 elementos, donde el primer elemento contendrá "Training" y así sucesivamente
  • Y cuando hacemos clic en el objeto, la transferencia se efectuará en el objeto.

Vamos a rastrear el funcionamiento de este método mediante la realización de una prueba inicial.

Vemos que cuando hacemos doble clic en una intervention, vamos a On load.

Vamos poder mostrar el array que contiene 5 elementos y a estos 5 elementos se les asignan valores poco a poco.
La intervención aparece.

Cuando elegimos un valor en el menú, vemos aquí el número de línea indicado en una variable, que es una variable que tiene el mismo nombre que el array, sino que es una variable de tipo entero largo.

Y aquí vemos los 5 elementos del array, los elementos de 1 a 5 y luego el elemento cero, al cual volveremos más adelante.

Cuando se ejecuta este método::

  • el evento en cuestión es "On Clicked".
  • comprobamos que un elemento ha sido seleccionado.
  • Si el elemento fue seleccionado, podemos:
  •      - Pasar por la variable intermedia (en este caso "ChosenElement")
  •      - Recuperar el valor elegido, si nos fijamos en ChosenElement, vemos que se trata de "Hardware"
  •      - Y transferimos este valor seleccionado al objeto.

Podemos sustituir estas 3 líneas por una sola como sigue:

 [Interventions]Object:=PopObjects{PopObjects}

¿Por qué?

Por que este valor es la variable entero largo que contenía 3 antes, por lo que indica el número de línea del array en cuestión (que tiene el mismo nombre).
Para cuestiones generales, con frecuencia encontrará este tipo de sintaxis:

 [Interventions]Object:=Self->{Self->}

que utiliza un puntero al objeto.

Dado que la programación se lleva a cabo en el objeto en sí mismo, Self se refiere al objeto y cuando escribimos Self->{Self->},

indicamos el array {en la línea elegida en el array} y transferimos el contenido directamente en el objeto.

Vamos a hacerle seguimiento para comprobar que se obtiene el mismo resultado.

  • Actualmente tenemos "System" en el objeto [intervention].
  • Si mostramos PopObjects{PopObjects} tenemos "System"
  • Si mostramos Self->{Self->} también tenemos "System"

Así que esta división nos ayuda a entender en detalle.
Esta es la forma más genérica y concisa de escribirlo.

Ahora vamos a crear un nuevo array donde podemos introducir una fecha con más o menos 10 días.

  • Duplico el objeto
  • le cambio el nombre
  • lo copio
  • y modifico su método.

Esta es un array fecha de 21 elementos: hoy + 10 días - 10 días

y vamos a escribir el código más conciso de esta manera.

Ahora, ¿Cómo llenar estos elementos? Vamos a hacer un bucle en el que asignamos un valor al array de la siguiente manera: (Current date + $i-11).

Por supuesto, el array tendrá el nombre correcto y ahora lo podemos probar:
y vemos aquí que cuando se elige un valor del array, se pasa junto a la fecha de intervención.

Ahora que ya sabe cómo programar arrays, puede representarlos en diferentes objetos 4D, tales como list boxes.

Un list box es un objeto compuesto por una o más columnas con un encabezado y una columna que es la que nos interesa, donde sólo tendremos que escribir el nombre del array que hemos administrado en memoria.

Si volvemos ahora a una intervención, el list box contiene los diferentes valores del array y vemos la sincronización directa entre la elección en el list box y la correspondiente en el array aquí.

Vamos a programar el list box de la misma manera para que cuando hagamos clic en él o cuando se haga una nueva selección en el mismo list box, el valor del objeto se modifique automáticamente.

En el list box seleccionamos los eventos On Clicked y On Selection Change.

Sólo tenemos que copiar la siguiente línea en el método objeto del list box:

 [Interventions]Object:=PopObjects{PopObjects}

Durante el uso, cuando se selecciona un valor en el list box con el ratón o con las flechas del teclado, los valores se transfieren de automáticamente.

Por supuesto, también es posible utilizar arrastrar y soltar, siempre y cuando las áreas se definan como arrastrables y soltables.

 
 

 
PROPIEDADES 

Producto: 4D
Tema: Arrays, pop-ups, list boxes

 
HISTORIA 

 
ARTICLE USAGE

Autoformación ( 4D v16)