Utilizar colecções e listas dentro de objectos de formulários

Tradução automática de Deepl

Ascolecções são cada vez mais utilizadas na programação 4D. Começando com 4D v19, pode utilizá-las para definir o conteúdo de alguns objectos de interface, inclusive através da função Formulário. Isto é muito útil para a gestão genérica da interface.

Também acrescentámos melhorias à forma como as listas são utilizadas. Vamos ver isto em detalhe!

Utilizar colecções e listas dentro de objectos de formulários

Melhorias na utilização de listas

A utilização da lista foi melhorada:
– Listas hierárquicas
– Controlos de tabulação (primeiro caso de utilização)

As colecções podem agora ser usadas como referências com os seguintes objectos:
– Listas descendentes (também conhecidas como “listas pop-up”)
– Caixas Combo
– Controlos de tabulação (segundo caso de utilização)

Listas hierárquicas e controlos de tabulação

Melhorámos a utilização de referências de lista para controlos de tabulação e formulários de lista hierárquica de objectos. Já era possível associar a referência de lista directamente ao objecto de formulário, mas esta referência pode agora ser recuperada a partir de um atributo de objecto. Por isso, agora é possível escrever isto :

// create a new object
$o
:=New object
// adicionar uma lista a este objecto
$o .listRef:=New list
// then add items, icons, etc. to this list

// (…)
//
depois chamar o diálogo utilizando este objecto (com a referência da lista incluída)
DIALOG ("myForm";$o)
// limpar a lista para evitar fugas de memória
CLEAR LIST ($o.listRef)

Feito!

Listas de drop-down (pop-ups), caixas Combo e controlos Tab (novamente!)

A principal evolução diz respeito às colecções. Os valores possíveis dos seguintes objectos de forma podem ser baseados numa colecção de valores escalares (geralmente alfanuméricos), mais exactamente num objecto que contém em si uma colecção. Porquê? Porque é geralmente necessário conhecer o valor seleccionado pelo utilizador e/ou seleccionar um valor por defeito (primeiro separador, terceiro item do drop-down, etc.)

A variável objecto conterá, portanto, os três atributos seguintes :
values: recolha de valores possíveis
index: índice do elemento escolhido (em drop-downs e tabs)
currentValue: valor actual (utilizado para caixas combinadas, onde o utilizador pode seleccionar ou introduzir um valor)

exemplo

Imagine que quer chamar um diálogo como o que se segue. Mas, antes de chamar o diálogo, pretende definir:

  • O conteúdo do Tab Control com “Alfa”; “Bravo”; “Charlie”.
  • O título (e dar a oportunidade de entrar num)
  • As escolhas possíveis para “Status

blank

Cada um destes objectos de forma terá o mesmo tipo de variável ou expressão associada: Objecto

blank

// prepare a global object that will be sent to the dialog command
$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 o separador "Alpha"

// prepare the Title object
$o .oCombo:=New object
$o .oCombo.values:=New collection("Mr"; "Mz"; "Dr")
$o .oCombo.currentValue:=""

// prepare the Status object
// dica : quando o índice = -1, o Valor actual é utilizado como um local de preenchimento !
$o .oPop:=New object
$o .oPop.values:=New collection("Single"; "Married"; "Widdow"; "Divorced")
$o .oPop.currentValue:="Select status..."
$o .oPop.index:=-1

$win :=Open form window("BLOG")
DIALOG ("BLOG"; $o)

Executar este método e preencher o diálogo…

blankblank

Uma vez validado o diálogo (OK é clicado), poderá saber que título e estatuto foram seleccionados ou introduzidos.

Aqui está o valor resultante do JSON do objecto devolvido:

blank

Conclusão

A utilização de um único objecto para definir imediatamente os valores exibidos e seleccionados é óptimo. É possível utilizar as colecções em muitos objectos ao mesmo tempo e evitar a utilização de matrizes de processo ou de interprocessamento. Evidentemente, o objectivo principal também é alcançado: isto tornará a programação genérica mais fácil do que nunca.

Como de costume, um HDI irá guiá-lo através desta funcionalidade, e a documentação também foi actualizada.

Desfrute e divirta-se com a codificação!

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.