4D v16.3

Utilizar arrays objetos en las columnas (4D View Pro)

Inicio

 
4D v16.3
Utilizar arrays objetos en las columnas (4D View Pro)

Utilizar arrays objetos en las columnas (4D View Pro)  


 

 

A partir de 4D v15, las columnas de list box pueden contener arrays de objetos. Como los arrays de objetos pueden contener diferentes tipos de datos, esta nueva y poderosa funcionalidad le permite mezclar diferentes tipos de valores en las líneas de una sola columna, y mostrar varios widgets también. Por ejemplo, puede insertar una entrada de texto en la primera fila, una casilla de selección en la segunda, y una lista desplegable en la tercera. Los arrays de objetos también ofrecen acceso a nuevos tipos de widgets, tales como botones o selectores de colores.

El siguiente list box fue diseñado utilizando un array objeto:

Nota sobre las licencias: la capacidad de utilizar arrays de objetos en list boxes es un primer paso para la próxima herramienta "4D View pro" que va a sustituir progresivamente el plug-in 4D View. Esta funcionalidad requiere una licencia 4D View válida. Para más información, por favor consulte el sitio Web de 4D.

Para asignar una array de objetos a una columna de list box, sólo tiene que definir el nombre del array de objetos, ya sea en la lista de propiedades (campo "Nombre de la variable"), o utilizando el comando LISTBOX INSERT COLUMN al igual que con toda columna asociada a un array. En la lista de propiedades, ahora puede seleccionar Objeto como "Tipo de variable" para la columna:

Las propiedades estándar relacionadas con coordenadas, tamaño y estilo están disponibles para las columnas de tipo objeto. Puede definirlas utilizando la lista de propiedades o programando los atributos de estilo, color de fuente, color de fondo y visibilidad para cada línea de columna objeto del list box. Este tipo de columna también se pueden ocultar.

Sin embargo, el tema Fuente de datos no está disponible para las columnas objeto de los list box. De hecho, el contenido de cada celda de la columna se basa en los atributos presentes en el elemento correspondiente del array de objetos. Cada elemento del array puede definir:

  • el tipo de valor (obligatorio): texto, color, evento, etc.
  • el valor en sí (opcional): utilizado para la entrada/salida.
  • la visualización de contenido de la celda (opcional): botón, lista, etc.
  • ajustes adicionales (opcional): dependen del tipo de valor. 

Para definir estas propiedades, es necesario definir los atributos adecuados en el objeto (los atributos disponibles se listan a continuación). Por ejemplo, puede escribir "Hello World!" en una columna objeto utilizando este simple código:

 ARRAY OBJECT(obColumn;0) // array de columnas
 C_OBJECT($ob//primer elemento
 OB SET($ob;"valueType";"text") //define el tipo de valor (obligatorio)
 OB SET($ob;"value";"Hello World!") //define el valor
 APPEND TO ARRAY(obColumn;$ob)

Nota: el formato de visualización y los filtros de entrada no se pueden definir para las columnas objeto. Dependen de forma automática del tipo de valor.

Cuando una columna de list box está asociada a un array de objetos, la visualización, la entrada y la edición de las celdas se basa en el atributo valueType presente en cada elemento del array. Los valores valueType soportados son:

  • "texto": para un valor texto
  • "real": para un valor numérico que puede incluir separadores como un <espacio>, <.>, o <,>
  • "integer": para un valor entero
  • "boolean": para un valor True/False
  • "color": para definir un color de fondo
  • "event": para mostrar un botón con una etiqueta.

4D utiliza los widgets por defecto en función del valor "valueType" (es decir, un "texto" se muestra como un widget de entrada de texto, un "booleano", como una casilla de selección), pero también están disponibles representaciones alternativas vía las opciones (por ejemplo, un real también puede representarse como un menú desplegable). La siguiente tabla muestra la visualización por defecto, así como también las alternativas para cada tipo de valor:

valueTypeWidget por defectoWidgets alternativos
textárea de entrada de textomenú desplegable (lista obligatoria) o combo box (lista de opciones)
realárea de entrada de texto controlada (números y separadores)menú desplegable (lista obligatoria) o combo box (lista de opciones)
integercontrolled text input (numbers only)menú desplegable (lista obligatoria) o combo box (lista de opciones) o casilla de selección de tres estados
booleancasilla de selecciónmenú desplegable (lista obligatoria)
colorcolor de fondotexto
eventbotón con etiqueta
Todos los widgets pueden tener un botón adicional unit toggle button o ellipsis button asociado a la celda.

Defina la visualización de la celda y las opciones utilizando los atributos específicos en cada objeto (ver abajo).

No se puede establecer formatos de visualización o filtros de entrada para columnas objeto de list box. Se definen automáticamente de acuerdo con el tipo de valor. Se enumeran en la siguiente tabla:
Value typeFormato por defectoControl de entrada
textel mismo que el del objetosin (no control)
realel mismo que el del objeto (utilización del separador decimal del sistema)"0-9", "." y "-"
"0-9" y "." si min>=0
integerel mismo que el del objeto"0-9" and "-"
"0-9" si min>=0
Booleancasilla de selecciónN/A
colorN/AN/A
eventN/AN/A

Cada elemento del array objeto de objetos es un objeto que puede contener uno o más atributos que definirán el contenido de la celda y la visualización de datos (ver el ejemplo anterior).

El único atributo obligatorio es "valueType" y sus valores soportados son "text", "real", "integer", "boolean", "color" y "event". La siguiente tabla muestra todos los atributos soportados en arrays de objetos de list box, en función del valor "valueType" (cualquier otro atributo se ignora). Los formatos de visualización y ejemplos se muestran a continuación.

valueTypetextrealintegerbooleancolorevent
AtributosDescripción
valuevalor de la celda (entrada o salida)xxx
minvalor mínimoxx
maxvalor máximoxx
behaviorvalor "threeStates"x
requiredListmenú desplegable definido en el objetoxxx
choiceListcombo box definido en objetoxxx
requiredListReferenceRefList 4D, depende del valor de "saveAs"xxx
requiredListNamenombre de lista 4D, depende del valor "saveAs"xxx
saveAs"reference" o "value"xxx
choiceListReferenceRefList 4D, muestra un combo boxxxx
choiceListNamenombre de lista 4D, muestra un combo boxxxx
unitListarray de X elementosxxx
unitReferenceíndice del elemento seleccionadoxxx
unitsListReferenceRefList 4D para las unidadesxxx
unitsListNamenombre de lista 4D para las unidadesxxx
alternateButtonañadir un botón alternativoxxxxx
value  

Los valores de las celdas se almacenan en el atributo "value". Este atributo se utiliza para la entrada y salida. También se puede utilizar para definir los valores por defecto cuando se utilizan las listas (ver abajo).

Ejemplo:

 ARRAY OBJECT(obColumn;0) //column array
 <p>C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob1;"valueType";"text")
 OB SET($ob1;"value";$entry// si el usuario introduce un nuevo valor, $entry contendrá el nuevo valor
 C_OBJECT($ob2)
 OB SET($ob2;"valueType";"real")
 OB SET($ob2;"value";2/3)
 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"boolean")
 OB SET($ob3;"value";True)
 
 APPEND TO ARRAY(obColumn;$ob1)
 APPEND TO ARRAY(obColumn;$ob2)
 APPEND TO ARRAY(obColumn;$ob3)

Nota: el valor Null es soportado y resulta en una celda vacía.

Cuando "valueType" es "real" o "integer", el objeto acepta también los atributos min y max con los valores apropiados (los valores deben ser del mismo tipo que el valueType).

Estos atributos se pueden utilizar para controlar el rango de valores de entrada. Cuando se valida una celda (cuando pierde el foco), si el valor de entrada es menor que el valor min o mayor que el valor max, entonces se rechaza. En este caso, el valor anterior se mantiene y un mensaje de ayuda muestra una explicación.

Ejemplo:

 C_OBJECT($ob3)
 $entry3:=2015
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";$entry3)
 OB SET($ob3;"min";2000)
 OB SET($ob3;"max";3000)

El atributo behavior ofrece variaciones de la representación estándar de los valores. En 4D v15, una sola variación es posible:

AtributoValor disponiblevalueType(s)Descripción
behaviorthreeStatesintegerRepresenta un valor numérico como casilla de selección de tres estados. 2=semi-marcado, 1=marcado, 0=no marcado, -1=invisible, -2=no marcado desactivado, -3=marcado desactivado, -4=semi-marcado desactivado

Ejemplo:

 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";-3)
 C_OBJECT($ob4)
 OB SET($ob4;"valueType";"integer")
 OB SET($ob4;"value";-3)
 OB SET($ob4;"behavior";"threeStates")

Cuando un atributo "choiceList" o "requiredList" está presente en el interior del objeto, la entrada de texto se sustituye por una lista desplegable o un combo box, dependiendo del atributo:

  • Si el atributo es "choiceList", la celda se muestra como un combo box. Esto significa que el usuario puede seleccionar o escribir un valor.
  • Si el atributo es "requiredList" entonces la celda se muestra como una lista desplegable. Esto significa que el usuario sólo puede seleccionar uno de los valores de la lista.

En ambos casos, un atributo "value" se puede utilizar para preseleccionar un valor en el widget.

Nota: los valores de widgets se definen a través de un array. Si desea asignar una lista 4D existente al widget, es necesario utilizar los atributos "requiredListReference", "requiredListName", "choiceListReference", o "choiceListName".

Ejemplos:

  • Usted quiere mostrar una lista desplegable con sólo dos opciones: "Open" o "Closed". "Closed" debe estar preseleccionada:
     ARRAY TEXT($RequiredList;0)
     APPEND TO ARRAY($RequiredList;"Open")
     APPEND TO ARRAY($RequiredList;"Closed")
     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"value";"Closed")
     OB SET ARRAY($ob;"requiredList";$RequiredList)

  • Usted quiere aceptar todo valor entero, pero mostrar un combo box para sugerir los valores más comunes:
     ARRAY LONGINT($ChoiceList;0)
     APPEND TO ARRAY($ChoiceList;5)
     APPEND TO ARRAY($ChoiceList;10)
     APPEND TO ARRAY($ChoiceList;20)
     APPEND TO ARRAY($ChoiceList;50)
     APPEND TO ARRAY($ChoiceList;100)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"integer")
     OB SET($ob;"value";10) //10 as default value
     OB SET ARRAY($ob;"choiceList";$ChoiceList)

Los atributos "requiredListName" y "requiredListReference" le permiten utilizar, en una celda de list box, una lista definida en 4D en modo Diseño (en la caja de herramientas) o por programación (utilizando el comando New list). La celda se mostrará como una lista desplegable. Esto significa que el usuario sólo puede seleccionar uno de los valores de la lista.

Utilice "requiredListName" o "requiredListReference" dependiendo del origen de la lista: si la lista proviene de la caja de herramientas, pase un nombre; de lo contrario, si la lista se ha definido por programación, pase una referencia. En ambos casos, un atributo "valor" se puede utilizar para preseleccionar un valor en el widget.

Nota: si desea definir estos valores a través de un array simple, es necesario utilizar el atributo "requiredList".

En este caso, el atributo "saveAs" definirá si el elemento seleccionado debe ser guardado como un "valor" o como una "referencia".

  • Si "saveAs" = "reference" entonces se guardará como una referencia y el "valueType" debe ser real o entero.
  • Si "saveAs" = "value" se guarda el valor. En este caso, el "valueType" debe ser del mismo tipo que los valores de la lista, "texto"o "entero" por lo general; de lo contrario 4D intentará convertir el valor de la lista en el "valueType" del objeto (ver ejemplos a continuación).

Para más información sobre la opción "guardar como", consulte la sección Guardar como Valor o Referencia en el Manual de Diseño.

Nota: si la lista contiene elementos de texto que representan los valores reales, el separador decimal debe ser un punto ("."), independientemente de los parámetros locales: "17.6" "1234.456".

Ejemplos:

  • Usted quiere mostrar una lista desplegable basado en una lista "colors" definida en la caja de herramientas (contiene los valores "blue", "yellow" y "green"), guárdela como un valor y muestre "blue" por defecto:

     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"saveAs";"value")
     OB SET($ob;"value";"blue")
     OB SET($ob;"requiredListName";"colors")

  • Usted quiere mostrar una lista desplegable basado en una lista definida por programación y guárdela como una referencia:
     <>List:=New list
     APPEND TO LIST(<>List;"Paris";1)
     APPEND TO LIST(<>List;"London";2)
     APPEND TO LIST(<>List;"Berlin";3)
     APPEND TO LIST(<>List;"Madrid";4)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"integer")
     OB SET($ob;"saveAs";"reference")
     OB SET($ob;"value";2) //muestra London por defecto
     OB SET($ob;"requiredListReference";<>List)

Los atributos "choiceListName" y "choiceListReference" le permiten utilizar, en una celda de list box, una lista definida en 4D en modo Diseño (en la caja de herramientas) o por programación (utilizando el comando New list). La celda a continuación se muestra como un combo box, lo que significa que el usuario puede seleccionar o digitar un valor.

Utilice "choiceListName" o "choiceListReference" dependiendo del origen de la lista: si la lista proviene de la caja de herramientas, se pasa un nombre; de lo contrario, si la lista se ha sido definido por programación, se pasa una referencia. En ambos casos, un atributo "value" se puede utilizar para preseleccionar un valor en el widget.

Nota: si desea definir estos valores a través de un array simple, es necesario utilizar el atributo "choiceList".

El atributo "saveAs" no se puede usar en este caso porque los elementos seleccionados se guardan automáticamente como un "value" (ver para más información).

Nota: si la lista contiene elementos de texto que representa los valores reales, el separador decimal debe ser un punto ("."), Independientemente de los parámetros locales, por ejemplo: "17.6" "1234.456".

Ejemplo:

Usted desea mostrar un combo box based on a "colors" basado en una lista "colors", definida en la caja de herramientas (que contiene los valores "blue", "yellow" y "green") y mostrar "green" por defecto:


 C_OBJECT($ob)
 OB SET($ob;"valueType";"text")
 OB SET($ob;"value";"blue")
 OB SET($ob;"choiceListName";"colors")

Puede utilizar atributos específicos para agregar unidades asociadas a valores de las celdas (por ejemplo: "10 cm", "20 píxeles", etc.). Para definir la lista de unidades, puede utilizar uno de los siguientes atributos:

  • "unitsList": un array que contiene los elementos x utilizados para definir las unidades disponibles (por ejemplo: "cm", "pulgadas", "km", "millas", etc.). Utilice este atributo para definir las unidades dentro del objeto.
  • "unitsListReference":una referencia a una lista 4D que contiene las unidades disponibles. Utilice este atributo para definir las unidades con una lista 4D creada con el comando New list.
  • "unitsListName": un nombre de una lista 4D creada en modo diseño que contenga las unidades disponibles. Utilice este atributo para definir las unidades con una lista 4D creada en la caja de herramientas.

Independientemente de la forma en que se defina la lista unidades, puede estar asociada al atributo siguiente:

  • "unitReference": un único valor que contiene el índice (de 1 a x) del elemento seleccionado en la lista de valores "unitList", "unitsListReference" o "unitsListName".

La unidad actual se muestra como un botón mostrando los valores "unitList", "unitsListReference" o "unitsListName" v cada vez que se hace clic (por ejemplo, "píxeles" -> "filas" -> "cm" -> "píxeles" - > etc.)

Ejemplo: queremos definir un valor de entrada numérico seguido de dos unidades posibles: "filas" o "píxeles". El valor actual es "2" + "líneas". Utilizamos valores definidos directamente en el objeto (atributo "unitsList" ):

 ARRAY TEXT($_units;0)
 APPEND TO ARRAY($_units;"lines")
 APPEND TO ARRAY($_units;"pixels")
 C_OBJECT($ob)
 OB SET($ob;"valueType";"integer")
 OB SET($ob;"value";2) // 2 "units"
 OB SET($ob;"unitReference";1) //"lines"
 OB SET ARRAY($ob;"unitsList";$_units)

Si desea agregar un botón de puntos suspensivos [...] a una celda, sólo tiene que pasar el atributo "alternateButton" con el valor True en el objeto. El botón se muestra en la celda de forma automática.

Cuando un usuario clic en este botón, se generará un evento On Alternate Click,  y podrá manejarlo como quiera (ver el párrafo "Gestión de eventos" para más información).

Nota: On Alternate Click es el nuevo nombre del evento On Arrow Click, renombrado en 4D v15 para resaltar su alcance extendido.

Ejemplo:

 C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob;"valueType";"text")
 OB SET($ob;"alternateButton";True)
 OB SET($ob;"value";$entry)

El atributo valueType de valor "color" le permite mostrar un color o un texto.

  • Si el valor es un número, un rectángulo de color se dibuja dentro de la celda. Ejemplo:
     C_OBJECT($ob4)
     OB SET($ob4;"valueType";"color")
     OB SET($ob4;"value";0x00FF0000)

        
  • Si el valor es un texto, a continuación, se muestra el texto (por ejemplo: "valor", "Automático").

El "evento" valueType muestra un botón simple que genera un evento On Clicked cuando el usuario hace clic. No se pueden pasar o devolver datos o valores.

Opcionalmente, se puede pasar un atributo "label".

Ejemplo:

 C_OBJECT($ob)
 OB SET($ob;"valueType";"event")
 OB SET($ob;"label";"Edit...")

Varios eventos se pueden manejar en las columnas de list box de tipo array de objetos:

  • On Data Change: un evento On Data Change se dispara al modificar un valor:
    • en un área de entrada de texto
    • en una lista desplegable
    • en un área de combo box
    • en un botón de unidad (cambio de valor de x a valor x+1)
    • en una casilla de selección (cambia entre marcado/no marcado)
  • On Clicked: cuando el usuario hace clic en un botón instalado utilizando el atributo valueType "event", un evento On Clicked se generará. Este evento es manejado por el programador.
  • On Alternative Click:cuando el usuario hace clic en un botón de puntos suspensivos (atributo "alternateButton"), un evento On Alternative Click se generará. Este evento es manejado por el programador.

Nota: On Alternative Click es el nuevo nombre del evento On Arrow Click que estaba disponible en versiones anteriores de 4D. Este evento ha sido renombrado en 4D v15 ya que su alcance se ha extendido.
        

 
PROPIEDADES 

Producto: 4D
Tema: List Box

 
HISTORIA 

Creado por: 4D v15

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)