4D v16Arrays, pop-ups, list boxes |
||||||||||||||||||||||||||||||||||||
|
4D v16
Arrays, pop-ups, list boxes
|
Etapa | Variável simples | Variável array |
Inicialização | C_TEXT(vText) | ARRAY TEXT(ArrayText;10) `10 linhas |
Valorização | vText:="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údo | CLEAR 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ário | Da 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 |
Tipos | Inteiro, Inteiro longo, Numérico, Alfa, Texto, Booleano, Data, Hora, Imagem, BLOB, ponteiros | Idê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.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:
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:
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:
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:
Para simplificar as coisas, vamos a colocar toda a programação no objeto. Isto também nos permitirá revisar o conceito de evento.
$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:
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:
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->}
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.
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.
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.
Produto: 4D
Tema: Arrays, pop-ups, list boxes
Autoformação ( 4D v16)