4D v16.3Gestão de List Boxes Hierárquicas |
||
|
4D v16.3
Gestão de List Boxes Hierárquicas
Gestão de List Boxes Hierárquicas
4D permite especificar e utilizar list box hierárquicos. Um list box hierárquico é um list box no qual o conteúdo da primeira coluna aparece na forma hierárquica. Este tipo de representação adapta-se à presentação da informação, incluindo os valores repetidos e/ou hierárquicamente dependentes (país/região/cidade...). Somente os list box do tipo array podem ser hierárquicos. Os list boxes do tipo hierárquico são uma forma de representação particular dos dados mas não modificam a estrutura desses dados (os arrays). Os list box hierárquicos são preenchidos e gerenciados exatamente do mesmo jeito que os list box regulares (veja Gestão de objetos List Box). Para especificar um list box hierárquico, há três possibilidades diferentes:
Quando é aberto por primeira vez um formulário que contém um list box hierárquico, por padrão todas as linhas são exibidas. Se esta list box é exibida em forma hierárquica (os três primeiros arrays são inseridos na hierarquía), obtém-se: Os arrays não são organizados antes da construção da hierarquía. Se por exemplo, um array contém os dados AAABBAACC, a hierarquía obtida vai ser: > A Para expandir ou contrair um "nó" hierárquico, simplesmente clique nele. Se pressionar Alt+clique (Windows) ou Opção+clique (Mac OS) no nó, todos os seus sub-elementos serão expandidos ou contraídos. Estas operações também podem ser feitas por programação utilizando os comandos LISTBOX EXPAND e LISTBOX COLLAPSE Um list box hierárquico mostra um número variável de linhas na tela de acordo com o estado exibido/contraído dos nós hierárquicos. Isto não significa contudo que o número de linhas dos arrays vai variar. Somente é modificada a visualização, não os dados. É importante entender este principio porque a gestão programada de list box hierárquicos se baseia sempre nos dados dos arrays, não nos dados mostrados. Particularmente, as quebras de linhas adicionadas automaticamente não são tidas em conta nos arrays de opções de visualização (consulte a seção "Gestão de quebras de linha"). Vejamos, por exemplo, os seguintes arrays: Se estes arrays estão representados hierárquicamente, a linhea "Quimper" não será mostrada na segunda linha, senão na quarta, por causa das duas quebras de linha adicionadas: Independentemente de como os dados são mostrados no list box (hierárquicamente ou não), se quiser mudar a linha que contém "Quimper" a negrito, deverá utilizar a instrução Style{2} = bold. Somente será tida em conta a posição da linha nos arrays. Este principio é aplicado para os arrays internos que podem ser utilizados para gerenciar:
Por exemplo, se você quiser selecionar a linha que contém Rennes, deverá passar: ->MeuListbox{3}:=True Representação não-hierárquica: Representação hierárquica: Nota: se uma ou mais linhas são ocultas porque seus pais estão contraídos, não são mais selecionados. Somente as linhas que são visíveis (seja diretamente ou por deslocamento) podem ser selecionados. Em outras palavras, as linhas não podem estar ao mesmo tempo ocultas e selecionadas. Da mesma maneira que com as seleções, o comando LISTBOX GET CELL POSITION retorna os mesmos valores para um list box hierárquico e um list box não hierárquico. Isto significa que nos dois exemplos a seguir, LISTBOX GET CELL POSITION retornará a mesma posição: (3;2). Representação não-hierárquica: Representação hierárquica: Se o usuário selecionar uma quebra de linha, LISTBOX GET CELL POSITION retorna a primeira ocorrência da linha no array correspondente. No seguinte caso: ... LISTBOX GET CELL POSITION retorna (2;4). Para selecionar uma quebra de linha por programação, deverá utilizar o comando LISTBOX SELECT BREAK. As quebras de linha não são tidas em conta nos arrays internos utilizados para gerenciar a aparência gráfica dos list box (estilos e cores). Contudo é possível modificar essas características para as quebras de linha vía os comandos de gestão gráfica para objetos (tema "Propriedades dos objetos"). Somente deverá executar os comandos apropriados nos arrays que constituem a hierarquia. Por exemplo a seguinte list box (os nomes dos arrays associados são especificados entre parênteses): Representação não-hierárquica: Representação hierárquica: No modo hierárquico, os níveis de quebra não são tidos em conta pelos arrays de modificação de estilo chamados tStyle e tColors. Para modificar a cor ou o estilo dos níveis de quebra, deveráe executar as seguintes instruções: OBJECT SET RGB COLORS(T1;0x0000FF;0xB0B0B0)  Nota: Neste contexto, somente a sintaxe que utiliza a variável array pode funcionar com os comandos de propriedade do objeto porque os arrays não têm objeto associado. Resultado: Quando todas as linhas de uma sub-hierarquia estão ocultas, a quebra de linha é oculta automaticamente. No exemplo anterior, se as linhas 1 à 3 estão ocultas, a quebra de linha "Brittany" não será exibida. Pode otimizar a visualização e a gestão dos list box hierárquicos utilizando os eventos formulário On Expand e On Collapse. Um list box hierárquico é construido a partir dos conteúdos de seus arrays pelo qual só podem ser mostrados quando todos os arrays são carregados na memória. Isto faz difícil a geração de list box hierárquicos de grande tamanho baseados em arrays gerados a partir dos dados (vía o comando SELECTION TO ARRAY), não somente pela velocidade de visualização, mas também pelo uso da memória. O uso dos eventos formulario On Expand e On Collapse permite superar estas limitações: por exemplo, agora pode ser mostrado somente uma parte da hierarquia e carregar/descarregar os arrays enquanto estiver rodando, em função das ações do usuário. No contexto destes eventos, o comando LISTBOX GET CELL POSITION devolve a célula onde o usuário clicou para expandir o contrair uma linha. Neste caso, deve preencher e esvaziar os arrays por código. Os principios a ser aplicados são: - Durante a visualização do list box, só o primeiro array deve ser preenchido. Contudo, você deve criar um segundo array com valores vazios para que o list box mostre os botões expandir/contrair: - Quando um usuário clica num botão de expandir, pode processar o evento On Expand. O comando LISTBOX GET CELL POSITION devolve a célula em questão e permite criar a hierarquia apropriada: preenche-se o primeiro array com os valores repetidos e o segundo com os valores enviados a partir do comando SELECTION TO ARRAY e inserir no list box tantas linhas quanto seja necessário utilizando o comando LISTBOX INSERT ROWS. - Quando um usuário clica num botão de contração, pode processar o evento On Collapse. O comando LISTBOX GET CELL POSITION retorna a célula em questão: elimina do list box tantas linhas quanto seja necessário utilizando o comando LISTBOX DELETE ROWS.
Ver também
Gestão de objetos List Box
|
PROPRIEDADES
Produto: 4D
HISTÓRIA
ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |