Arrays y objetos de formulario

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 2004 (Modificado)


Los arrays son objetos del lenguaje—usted puede crear y utilizar arrays que nunca aparecerán en una pantalla. Sin embargo, los arrays también son objetos de la interfaz del usuario. Los siguientes tipos de Objetos de formulario están soportados por arrays:

Menú desplegable

Combo Box

Área de desplazamiento

Pestaña

List box

Usted puede predefinir estos objetos en el editor de formularios del entorno Diseño utilizando lel botón de los valores por defecto de la ventana Lista de propiedades (excepto List box), también puede definirlos por programación utilizando los comandos de arrays. En ambos casos, el objeto de formulario está soportado por un array creado por usted o por 4D.

Cuando utiliza estos objetos, puede detectar que elemento del objeto ha sido seleccionado (o recibió un clic) sometiendo a una prueba al elemento seleccionado del array. Inversamente, puede seleccionar un elemento particular del objeto designando el elemento seleccionado para el array.

Cuando un array se utiliza para generar un objeto de formulario, tiene una naturaleza doble; es a la vez un objeto del lenguaje y un objeto de la interfaz del usuario. Por ejemplo, cuando diseña un formulario y crea un área de desplazamiento:

El nombre de la variable asociada, en este caso atNombres, es el nombre del array que usted utiliza para crear y administrar el área de desplazamiento.

Notas:

No puede mostrar arrays de dos dimendiones ni arrays de punteros.

La gestión de objetos de tipo List box (los cuales pueden contener varios arrays) implica numerosos aspectos específicos. Estas particularidades son tratadas en la sección Manejo de objetos List Box.

Ejemplo: Creación de un menú desplegable


El siguiente ejemplo muestra cómo llenar un array y mostrarlo en una lista desplegable. Un array arSalarios se crea utilizando el comando ARRAY REAL. Contiene todos los salarios de las personas de una empresa. Cuando el usuario selecciona un elemento en el menú desplegable, el campo [Empleados]Salario recibe el valor escogido.

Creación del menu desplegable Salarios en un formulario

Cree un menú desplegable y llámela arSalarios. El nombre del menú desplegable debe ser el mismo del Array.

Inicialización del Array

Inicialice el Array arSalarios utilizando el evento On Load para el objeto. Para hacer esto, recuerde activar el evento en la ventana Lista de propiedades, como se muestra a continuación:

Haga clic en el botón Método de objeto y cree el siguiente método:

Las líneas:

   ARRAY REAL(arSalarios;10)
   For($vlElem;1;10)
      arSalarios{$vlElem}:=2000+($vlElem*500)
   End for

crean el array numérico 2500, 3000... 7000, correspondiente a los salarios anuales de $30 000 a $84 000, antes de impuestos.

Las líneas:

   arSalarios:=Find in array(arSalarios;[Empleados]Salario)
   If (arSalarios=-1)
      arSalarios:=0
   End if

manejan la creación de un nuevo registro o la modificación de un registro existente.

Si crea un nuevo registro, el campo [Empleados]Salario inicialmente es igual a cero. En este caso, Find in Array no encuentra el valor en el array y devuelve -1. La prueba If (arSalarios=-1) coloca en cero a arSalarios, indicando que no se ha seleccionado un elemento en la lista desplegable.

Si modifica un registro existente, Find in Array recupera el valor en el array y da al elemento seleccionado de la lista desplegable el valor actual del campo. Si el valor para un empleado no está en la lista, la prueba If (arSalarios=-1) deselecciona todos los elementos de la lista.

Nota: para mayor información sobre el elemento de array seleccionado, lea la próxima sección.

Asignación del valor seleccionado al campo [Empleados]Salario

Para reportar el valor seleccionado del menú desplegable arSalarios, sólo necesita administrar el evento On Clicked del objeto. El número de elemento seleccionado es el valor del array arSalarios. Por lo tanto, la expresión arSalarios{arSalarios} devuelve el valor seleccionado en la lista desplegable.

Complete el método de objeto arSalarios de esta forma:

   Case of
      : (Form event=On Load)
         ARRAY REAL(arSalarios;10)
         For($vlElem;1;10)
            arSalarios{$vlElem}:=2000+($vlElem*500)
         End for
         arSalarios:=Find in array(arSalarios;[Empleados]Salario)
         If (arSalarios=-1)
            arSalarios:=0
         End if
      : (Form event=On Clicked)
         [Empleados]Salario:=arSalarios{arSalarios}
   End case

El menú desplegable se ve así:

La siguiente sección describe las operaciones comunes y básicas que usted realizará sobre arrays cuando los utiliza como objetos de formulario.

Obtener el tamaño de un array


Usted puede obtener el tamaño actual de un array utilizando el comando Size of Array. Utilizando el ejemplo anterior, la siguiente línea de código mostrará 5:

ALERT ("El tamaño del array atNombres es: "+String(Size of array(atNombres)))

Reordenar los elementos del array


Puede reordenar los elementos del array utilizando el comando SORT ARRAY o de diferentes arrays utilizando el comando MULTI SORT ARRAY. Utilizando el ejemplo anterior, y siempre que el array se muestre como un área de desplazamiento:

a. Al principio, el área se verá como la lista a la izquierda.

b. Después de la ejecución de la siguiente línea de código:

   SORT ARRAY(atNombres;>)

el área se verá como la lista en el medio.

c. Después de la ejecución de la siguiente línea de código:

   SORT ARRAY(atNombres;<)

el área se verá como la lista a la derecha.

Añadir o borrar elementos


Usted puede añadir, insertar, o borrar elementos utilizando los comandos APPEND TO ARRAY, INSERT IN ARRAY y DELETE FROM ARRAY.

Gestión de los clics en el array: probar el elemento seleccionado


Utilizando el ejemplo anterior, y siempre que el array se muestre como un área de desplazamiento, usted puede manejar los clics en esta área de la siguiente forma:

      ` Método de objeto área de desplazamiento atNombres 
   Case of
      : (Form event=On Load)
            ` Inicializar el array (como se mostró anteriormente)
         ARRAY TEXT (atNames;5)
            ` ...
      : (Form event=On Unload)
            ` No necesitamos más el array
         CLEAR VARIABLE(atNombres)

      : (Form event=On Clicked)
         If (atNombres#0)
            vtInfo:="Usted hace clic en: "+atNombres{atNombres}
         End if
      : (Form event=On Double Clicked)
         If (atNombres#0)
            ALERT ("Usted hace doble clic en: "+atNombres{atNombres}
         End if
   End case

Nota: los eventos deben ser activados en las propiedades del objeto.

Mientras la sintaxis atNombres{$vlElem} le permite trabajar con un elemento particular del array, la sintaxis atNombres devuelve el número del elemento seleccionado en el array. De esta manera, la sintaxis atNombres{atNombres} significa "el valor del elemento seleccionado en el array atNombres." Si ningún elemento ha sido seleccionado, atNombres es igual a 0 (cero), de manera que la prueba If (atNames#0) detecta si un elemento ha sido seleccionado realmente o no.

Designar el elemento seleccionado


Puede cambiar por programación el elemento seleccionado asignando un valor al array.

Ejemplos

      ` Seleccionar el primer elemento (si el array no está vacío)
   atNombres:=1

      ` Seleccionar el último elemento (si el array no está vacío)
   atNombres:=Size of array(atNombres)

      ` Deseleccionar el elemento seleccionado (si lo hay) entonces ningún elemento está seleccionado
   atNombres:=0 

   If ((0<atNombres)&(atNombres<Size of array(atNombres))
         ` Si es posible, seleccionar el elemento siguiente al elemento seleccionado
      atNombres:=atNombres+1 
   End if

   If (1<atNombres)
          `  Si es posible, seleccionar el elemento anterior al elemento seleccionado 
      atNombres:=atNombres-1
   End if

Búsqueda de un valor en el array


El comando Find in Array busca un valor particular en un array. Utilizando el ejemplo anterior, el siguiente código seleccionará el elemento cuyo valor es "Ricardo," si ese es el nombre introducido en la caja de diálogo de solicitud:

   $vsNombre:=Request("Introduzca el nombre:")
   If (OK=1)
      $vlElem:=Find in array (atNombres;$vsNombre)
      If ($vlElem>0)
         atNombres:=$vlElem
      Else
         ALERT ("No está "+$vsNombre+" en esta lista de nombres.")
      End if
   End if

Los menús desplegables, áreas de desplazamiento y pestañas generalmente pueden ser administrados de la misma manera. Evidentemente, no es necesario código adicional para redibujar objetos en la pantalla cada vez que cambie el valor de un elemento, o añada o borre elementos.

Nota: para crear y utilizar pestañas con iconos y activar y desactivar pestañas, debe utilizar una lista jerárquica como objeto de soporte para la pestaña. Para mayor información, vea el ejemplo del comando New list.

Gestión de combo boxes


Mientras usted puede manejar menús desplegables, áreas de desplazamiento, y pestañas con los algoritmos descritos en las sección anterior, los combo boxes se manejan de forma diferente.

Un combo box es en realidad un área de entrada de texto la cual está asociada a una lista de valores (los elementos del array). El usuario puede elegir un valor de esta lista, y luego editar el texto. Por lo tanto, para un combo box, la noción de elemento seleccionado no aplica.

Con los combo boxes, nunca hay un elemento seleccionado. Cada vez que el usuario selecciona uno de los valores asociado al área, el valor se coloca en el elemento cero del array. Luego, si el usuario edita el texto, el valor modificado por el usuario también se coloca en el elemento cero.

Ejemplo

      ` Método de objeto Combo Box asColores 
   Case of
      : (Form event=On Load)
         ARRAY STRING(31;asColores;3)
         asColores{1}:="Azul"
         asColores{2}:="Blanco"
         asColores{3}:="Rojo"
      : (Form event=On Clicked)
         If (asColores{0}#"")
               ` El objeto cambia automáticamente su valor 
               ` La utilización dle evento On Clicked con un Combo Box
               ` se necesita sólo cuando se deben tomar acciones adicionales
         End if
      : (Form event=On Data Change)
            ` Buscar en array ignora el elemento 0, de manera que devuelve -1 o >0
         If (Find in array(asColores;asColores{0})<0) 
               ` El valor introducido no es uno de los valores adjuntos al objeto 
               ` Añadir el valor a la lista para la próxima vez
            APPEND TO ARRAY(asColores;asColores{0})
         Else
               ` El valor introducido está entre los valores adjuntos al objeto 
         End if
   End case

Ver también

Áreas de desplazamiento agrupadas, Arrays.


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