4D v16

Arrays, pop-ups, list boxes

Página Inicial

 
4D v16
Arrays, pop-ups, list boxes

Arrays, pop-ups, list boxes    


 

 

Além das manipulações explicadas no vídeo, também deve levar em conta que:

Os arrays são uma das características indispensáveis em 4D.

Práticos, ilimitados, dinâmicos, de uma ou duas dimensões, são um espaço em memória que se pode mostrar nos formulários por intermédio de objetos (pop-ups, combo boxes, list boxes, áreas de deslocamento, etc.)

Já tratamos o conceito e o uso de variáveis com um só valor. Um array é uma variável com vários valores onde se podem ler ou escrever cada um de seus elementos.

Definimos um array pelo número de linhas que contém e seu tipo. Este gráfico mostra as diferentes etapas de uma variável e o ciclo da vida de um array:

EtapaVariável simplesVariável array
InicializaçãoC_TEXT(vText)ARRAY TEXT(ArrayText;10) `10 linhas
ValorizaçãovText:="Tascher da Pagerie"ArrayText{1}:="De Beauharnais" `linha 1
ArrayText{2}:="Barras" `linha 2
ArrayText{3}:="Bonaparte" `linha 3
...
Uso$NumChar:=Length(vText)$Amant:=ArrayText{1}
Apagar o conteúdoCLEAR VARIABLE(vText)ARRAY TEXT(ArrayText;0)
(o comportamento é diferente entre uma aplicação interpretada e compilada,
ver a documentação 4D)
Visualização em um formulárioDa o nome da variável a um objeto de tipo área de deslocamento,Dar o nome da variável a um objeto de tipo área de deslocamento/menu pop-up
TiposInteiro, Inteiro longo, Numérico, Alfa, Texto, Booleano, Data, Hora, Imagem, BLOB, ponteirosIdênticos aos tipos de variáveis exceto Hora e BLOB

Como pode ver, há um número de similaridades entre as duas.

O nome do array se utiliza as vezes com chaves {}, as vezes sozinho. Neste caso, se trata de uma variável (inteiro longo) criada automaticamente por 4D.

Esta variável, associada ao array, serve como um índice (número de linha) de array. É através desta variável que podemos saber que linha foi selecionada pelo usuário ou forçar as seleções de uma linha especifica no menu pop-up.

Esta é a razão pela que verá muitas vezes esta sintaxe concisa escrita na base de dados:

 [INTERVENTIONS]Object:=ObjectsArr{ObjectsArr}

que podemos decifrar da seguinte maneira: "Object := conteúdo do array {na linha selecionada}"
Também encontrará, ainda que mais concisa e muito mais genérica, esta sintaxe que utiliza o comando Self (ponteiro ao objeto cujo método se está executando):

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

Independentemente da sintaxe utilizada, o funcionamento é o mesmo.

Em 4D, uma guia é um objeto único, com vários títulos (valores). Este é um exemplo de um objeto de interface que pode representar um array.

Geralmente, colocamos as guias na página 0 do formulário (ver a seção cobre este ponto).

Notará que os arrays se tornam bem úteis rapidamente, na verdade pronto se convertem em uma necessidade.

Um array contém somente elementos do mesmo tipo. Não pode ter um array com um elemento Alfa, um elemento Data e um terceiro elemento Hora.

Neste caso, pode utilizar um array de ponteiros que apontem as variáveis de diferentes tipos.

Como se mencionou na lição sobre os ponteiros, se podem combinar ponteiros e arrays para obter "arrays de ponteiros".

Também pode considerar que um list box é uma série de arrays conectados (da mesma dimensão X).

É um objeto que agrupa e sincroniza um ou mais arrays.

Em um list box, pode configurar:

  • o list box mesmo
  • cada cabeçalho de coluna
  • e cada coluna

Em total, se o list box tem X colunas, você tem 2X+1 objetos (X colunas, X cabeçalhos + 1 list box).

Os list boxes permitem:

  • introduzir dados
  • Ordenar e mover linhas e colunas
  • Mostrar cores alternas
  • A visualização hierárquica
  • Adicionar totais aos pés de página
  • Um list box se pode sincronizar com arrays como fizemos aqui ou com campos da seleção atual (ou uma seleção temporal) de uma tabela
  • ...

Leve em conta que o list box sincroniza suas colunas, toma o menor número de linhas dos arrays que o compõe.

Este ponto é importante de lembrar, já que poderia ter arrays que estão cheios de dados e ainda assim terminar com um list box vazio se um de seus arrays está vazio.

Neste vídeo, vamos a aprender a criar e programar arrays assim também os objetos que podemos utilizar para que sejam representados nos formulários.

Ao igual que uma variável simples, um array deve:

  • Ser declarado
  • Atribuir-lhe um valor
  • E logo utilizá-lo.

Para nos ajudar a entender isto, vamos a criar um primeiro array no formulário DETAIL da tabela INTERVENTIONS.

Este array preocupa os objetos.
Devemos então:

  1. Criar o array em memória
  2. Colocar um objeto no formulário que pode representar este array em memória
  3. Verificar que o array contenha a informação correta
  4. Logo, quando se seleciona um valor no array, transferimos este valor ao campo

Para simplificar as coisas, vamos a colocar toda a programação no objeto. Isto também nos permitirá revisar o conceito de evento.

  • Selecionamos o objeto popup/lista deslocável
  • Logo, traçar à direita do campo OBJECT.
  • O chamamos PopObjects
  • Selecionamos os eventos On Load e On Clicked
  • A continuação editamos o método.

 $evt:=Form event
 Case of
    :($evt=On Load//antes da visualização do formulário
       ARRAY TEXT(PopObjects;5) //Definição do array (tipo, nome e número de elementos)
 
  //Cheio dos elementos do array
       PopObjects{1}:="Training"
       PopObjects{2}:="Software"
       PopObjects{3}:="Hardware"
       PopObjects{4}:="Network"
       PopObjects{5}:="System"
 
    :($evt=On Clicked//quando o usuário seleciona um elemento no array
       If(PopObjects#0) //se o usuário seleciona um elemento
          $ChosenElement:=PopObjects //se guarda o elemento selecionado
          $ChosenValue:=PopObjects{$ChosenElement//guardamos o valor contido neste elemento
          [Interventions]Object:=$ChosenValue  //atribuímos o valor ao campo
       End if
 End case

O método objeto se compõe de certo número de elementos:

  • Inicialmente, a prova do evento.
  • Se tratado de "On Load", criamos um array de 5 elementos, onde o primeiro elemento conterá "Training" e assim sucessivamente
  • E quando fazemos clique no objeto, a transferência será realizada no objeto.

Vamos a rastrear o funcionamento deste método mediante a realização de uma prova inicial.

Vemos que quando fazemos duplo clique em uma intervention, vamos a On load.

Vamos poder mostrar o array que contém 5 elementos e a estes 5 elementos se lhes atribuem valores pouco a pouco.
A intervenção aparece.

Quando elegemos um valor no menu, vemos aqui o número de linha indicado em uma variável, que é uma variável que tem o mesmo nome que o array, só que é uma variável de tipo inteiro longo.

E aqui vemos os 5 elementos do array, os elementos de 1 a 5 e logo o elemento zero, ao qual volveremos mais a frente.

Quando se executa este método:

  • O evento em questão é "On Clicked".
  • Comprovamos que um elemento foi selecionado.
  • Se o elemento foi selecionado, podemos:
  •      - Passar pela variável intermediária (neste caso "ChosenElement")
  •      - Recuperar o valor elegido, se nos prendemos em ChosenElement, vemos que se trata de "Hardware"
  •      - E transferimos este valor selecionado ao objeto.

Podemos substituir estas 3 linhas por uma só como segue:

 [Interventions]Object:=PopObjects{PopObjects}

Por quê?

Por que este valor é a variável inteiro longo que continha 3 antes, pelo que indica o número de linha do array em questão (que tem o mesmo nome).
Para questões gerais, com frequência encontrará este tipo de sintaxes:

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

que utiliza um ponteiro ao objeto.

Dado que a programação é levada a cabo no objeto em si mesmo, Self se refere ao objeto e quando escrevemos Self->{Self->},

indicamos o array {na linha escolhida no array} e transferimos o conteúdo diretamente no objeto.

Vamos fazer seguimento para comprovar que se obtém o mesmo resultado.

  • Atualmente temos "network" no objeto [intervention].
  • Se mostramos PopObjects{PopObjects} temos "network"
  • Se mostramos Self->{Self->} também temos "network"

Assim que esta divisão nos ajuda a entender em detalhe.
Esta é a forma mais genérica e concisa de escrever.

Agora vamos a criar um novo array onde podemos introduzir uma data com mais ou menos 10 dias.

  • Duplico o objeto
  • Mudo o nome
  • Copio
  • Modifico seu método.

Esta é um array data de 21 elementos: hoje + 10 dias - 10 dias

E vamos a escrever o código mais conciso desta maneira.

Agora, Como encher estes elementos? Vamos a fazer um bucle no qual atribuímos um valor ao array da seguinte maneira: (Current date + $i-11).

É claro, o array terá o nome correto e agora podemos provar:
e vemos aqui que quando se elege um valor do array, se passa junto à data de intervenção.

Agora que já sabe como programar arrays, pode representá-los em diferentes objetos 4D, tais como list boxes.

Um list box é um objeto composto por uma ou mais colunas com um cabeçalho e uma coluna que é a que nos interessa, onde somente teremos que escrever o nome do array que temos administrado em memória.

Se voltamos agora a uma intervenção, o list box contém os diferentes valores do array e vemos a sincronização direta entre a eleição no list box e a correspondente no array aqui.

Vamos a programar o list box da mesma maneira para que quando façamos clique nele ou quando se faça uma nova seleção no mesmo list box, o valor do objeto se modifique automaticamente.

No list box selecionamos os eventos On Clicked e On Selection Change.

Somente temos que copiar a seguinte linha no método objeto do list box:

 [Interventions]Object:=PopObjects{PopObjects}

Durante o uso, quando se seleciona um valor no list box com o mouse ou com as flechas do teclado, os valores se transferem de automaticamente.

É claro, também é possível utilizar arrastar e soltar, sempre e quando as áreas se definam como arrastáveis e soltáveis.

 
 

 
PROPRIEDADES 

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

 
HISTÓRIA 

 
ARTICLE USAGE

Autoformação ( 4D v16)