Las colecciones se utilizan cada vez más en la programación de 4D. A partir de 4D v19, puede utilizarlas para definir el contenido de algunos objetos de interfaz, incluso a través de la función Form. Esto es muy útil para la gestión genérica de interfaces.
También hemos añadido mejoras en el uso de las listas. ¡Veamos esto en detalle!
Usar colecciones y listas dentro de los objetos de los formularios
Mejoras en el uso de las listas
Se ha mejorado el uso de listas:
– Listas jerárquicas
– Controles de pestañas (primer caso de uso)
Las colecciones pueden utilizarse ahora como referencias con los siguientes objetos:
– Listas desplegables (también conocidas como «listas emergentes»)
– Cuadros combinados
– Controles de pestañas (segundo caso de uso)
Listas jerárquicas y controles de pestañas
Hemos mejorado el uso de las referencias a listas para los controles de pestañas y los objetos de formulario de listas jerárquicas. Ya era posible asociar la referencia de la lista directamente al objeto de formulario, pero ahora esta referencia puede ser recuperada desde un atributo del objeto. Así que ahora se puede escribir esto :
// create a new object
$o:=New object
// añadir una lista a este objeto
$o .
listRef:=New list
// then add items, icons, etc. to this list
// (…)
// luego llamar al diálogo usando este objeto (con la referencia a la lista incluida)
DIALOG ("myForm";$o)
// borrar la lista para evitar pérdidas de
memoria
CLEAR LIST (
$o.listRef)
¡Listo!
Listas desplegables (pop-ups), cuadros combinados y controles de tabulación (¡de nuevo!)
La principal evolución se refiere a las colecciones. Los posibles valores de los siguientes objetos de formulario pueden basarse en una colección de valores escalares (normalmente alfanuméricos), más exactamente en un objeto que contiene a su vez una colección. ¿Por qué? Porque generalmente es necesario conocer el valor seleccionado por el usuario y/o seleccionar un valor por defecto (primera pestaña, tercer elemento del desplegable, etc.)
La variable del objeto contendrá, por tanto, los tres atributos siguientes :
– values: colección de valores posibles
– index: índice del elemento elegido (en los cuadros desplegables y pestañas)
– currentValue: valor actual (utilizado para los cuadros combinados, donde el usuario puede seleccionar o introducir un valor)
ejemplo
Imagina que quieres llamar a un diálogo como el de abajo. Pero, antes de llamar al diálogo, quieres definir
- El contenido del control de pestañas con «Alpha»; «Bravo»; «Charlie»
- El título (y dar la oportunidad de introducir uno)
- Las posibles opciones de «Estado»
Cada uno de estos objetos de formulario tendrá el mismo tipo de variable o expresión asociada: Objeto
// prepare a global object that will be sent to the dialog command
$o$o:=New object
// prepare the tab control object
$o .oTab:=New object
$o .oTab.values:=New collection("Alpha"; "Bravo"; "Charlie")
$o .oTab.index:=0 // seleccione la pestaña "Alpha"
// prepare the Title object
$o .oCombo:=New object
.oCombo.values:=New collection("Mr"; "Mz"; "Dr")
$o .oCombo.currentValue:=""
// prepare the Status object
// consejo : ¡cuando el índice = -1, el currentValue se utiliza como marcador de posición!
$o .oPop:=New object
$o .oPop.values:=New collection("Soltero"; "Casado"; "Viudo"; "Divorciado")
$o .oPop.currentValue:="Seleccionar estado..."
$o .oPop.index:=-1
$win :=Open form window("BLOG")
DIALOG ("BLOG"; $o)
Ejecuta este método y rellena el diálogo…
Una vez validado el diálogo (se hace clic en OK), podrá saber qué título y estado se han seleccionado o introducido.
Aquí está el valor JSON resultante del objeto devuelto:
Conclusión
Usar un único objeto para definir inmediatamente los valores mostrados y seleccionados es genial. Puedes utilizar las colecciones en muchos objetos a la vez y evitar el uso de arrays de proceso o interproceso. Por supuesto, también se alcanza el objetivo principal: esto hará que la programación genérica sea más fácil que nunca.
Como siempre, un IDH te guiará a través de esta característica, y la documentación también ha sido actualizada.
¡Disfruta y diviértete codificando!