4D v16.3Gestão de objetos List Box |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Gestão de objetos List Box
Gestão de objetos List Box
Os comandos de este tema estão dedicados à gestão de objetos de formulário de tipo List box. É possível configurar completamente um list box no editor de formulários de 4D e igualmente pode controlá-lo por programação. Para mais informação sobre a criação e definição de List boxes no editor de formulários como também sobre seu uso, consulte o Manual de Desenho da documentação 4D. A programação de objetos de tipo List box é efetuada da mesma forma que para os outros objetos de formulário em lista de 4D. Entretanto, devem ser seguidas as regras específicas, descritas nesta seção. Uma list box pode conter uma ou mais colunas e pode estar associado a arrays 4D ou a uma seleção de registros. No caso de list boxes de tipo seleção, as colunas são associadas a campos ou expressões. Não é possível ter ambos tipos de fontes de dados (arrays e seleções) combinados no mesmo list box. A definição da fonte de dados é realizada no momento da criação da list box no editor de formulários, através da Lista de propriedades. Então já não é possível modificá-lo por programação. Neste tipo de list box, cada coluna está associada a um array 4D de uma dimensão; todos os tipos de array podem ser utilizados, exceto os arrays de ponteiros. O formato de saída de cada coluna pode ser definido no editor de formulários ou utilizando o comando OBJECT SET FORMAT. Por exemplo, para inicializar o conteúdo de uma coluna, pode utilizar a seguinte instrução: ARRAY TEXT(NomColuna;tamanho) Igualmente pode utilizar uma lista: LIST TO ARRAY("ListName";ColumnName) Advertência: Quando um list box contém várias colunas de diferentes tamanhos, só é mostrada o número de elementos do array menor (coluna). Deve ter certeza que cada array tenha o mesmo número de elementos que os outros. Igualmente, se uma coluna da list box está vazia (isto ocorre quando o array associado não foi declarado corretamente ou dimensionado utilizando a linguagem), a list box não mostra nada. Neste tipo de list box, cada coluna pode estar associada com um campo ou uma expressão. O conteúdo de cada fila é avaliado de acordo com uma seleção de registros: a seleção atual de uma tabela ou uma seleção temporal. Quando a seleção atual é a fonte de dados, todas as modificações realizadas no banco são reportadas automaticamente no list box e vice-versa. A seleção atual é então sempre a mesma em ambas localizações. Note que os comandos LISTBOX INSERT ROW e LISTBOX DELETE ROW não podem ser utilizados com list boxes de tipo seleção. Pode associar uma coluna de list box a uma expressão. A expressão pode estar baseada em um ou mais campos (por exemplo [Empregados]Sobrenome+" "+[Empregados]Nome) ou simplesmente em uma fórmula (por exemplo String(Milliseconds)). A expressão também pede um método de projeto, uma variável ou um elemento de array. O comando LISTBOX SET TABLE SOURCE pode ser utilizado para modificar a tabela associada com a list box por programação. Um objeto List box está composto de três tipos de elementos separados:
Por padrão, as colunas são chamadas Columna1 a X e os títulos Título1 a X no formulário, independentemente dos objetos list box. Note que por padrão, os mesmos nomes são usados para objetos e suas variáveis associadas, exceto para os pés (por padrão as variáveis estão vazias para os pés, 4D usa as variáveis dinâmicas).
Nota: Com list boxes de tipo array, é possível especificar o estilo, cor de fonte, cor de fundo e visibilidade para cada linha separadamente. Isto é administrado através de arrays associados com o list box na lista de propriedades. Pode recuperar os nomes destes arrays por programação utilizando o comando LISTBOX GET ARRAYS. É possível adiconar um método de objeto ao objeto list box ou a cada coluna da list box. Os métodos de objeto são chamados na seguinte ordem:
Quando o comando OBJECT SET VISIBLE é utilizado com um cabeçalho, é utilizado em todos os cabeçalhos del objeto List box, sem importar o título definido no comando. Por exemplo, a instrução OBJECT SET VISIBLE(*;"título3";False) ocultará todos os títulos do objeto List box ao qual pertence titulo3 e não unicamente este cabeçalho. A função OBJECT Get pointer utilizada com a constante Object with focus ou Object current (antigas funções Focus object e Self) pode ser utilizada no método de objeto de um list box ou de uma coluna de list box.
(*) Quando o foco se modifica dentro de um list box, se devolve a coluna um ponteiro. Quando o foco se modifica a nivel do formulário, se devolve um ponteiro ao list box. No contexto de um método de objeto de coluna, se devolve um ponteiro a coluna. (**) Não executado no contexto de um método de objeto de coluna. (1) Quando se devolve um ponteiro a uma coluna, o objeto ao qual se aponta depende do tipo do list box. Com um array de tipo list box, a função OBJECT Get pointer devolve um ponteiro ao array). O mecanismo de ponteiros de 4D permite conhecer o número do elemento do array modificado. Por exemplo, supondo que o usuário modificou a quinta fila da coluna col2: $Column:=OBJECT Get pointer(Object with focus) No caso de um list box de tipo seleção, a função OBJECT Get pointer devolve:
O comando OBJECT SET SCROLL POSITION (tema “Propriedades dos objetos") pode ser utilizada com um objeto de tipo list box. Esse comando permite deslocar as linhas da list box para mostrar a primeira linha selecionada ou uma linha específica. O comando EDIT ITEM (tema “Gestão de entrada”) lhe permite passar a modo edição uma célula de um objeto list box. Quando se aplica a um listbox em modo seleção, o comando REDRAW (tema "Interface do usuário") dispara a atualização dos dados mostrados na list box. O comando Displayed line number (tema "Seleções") funciona no contexto do evento de formulário On Display Detail para um objeto list box. Eventos de formulário específicos estão destinados a facilitar a gestão do list box, em particular com o relacionado às operações de arrastar e soltar e ordenar. Para maior informação, consulte a descrição do comando Form event. O administrar o arrastar e soltar de dados em list boxes é compatível pelos comandos Drop position e DRAG AND DROP PROPERTIES. Estes comandos foram adaptados especialmente para os list boxes. Tenha cuidado em não confundir arrastar e soltar com mover filas e colunas, realizado pelos comandos LISTBOX MOVED ROW NUMBER e LISTBOX MOVED COLUMN NUMBER. Para uma célula é editável caixa de listagem, tanto das seguintes condições devem ser atendidas:
Imagine por exemplo uma caixa de listagem que contém dois arrays, data e tipo de texto. A data é editável matriz, mas a matriz é em texto editável se a data não passou. Este é o método da coluna arrText: Case of Nota: a partir de 4D v13, o evento On Before Data Entry é retornado antes do On Getting Focus. Para preservar consistência de dados para list boxes de tipo de seleção, qualquer registro modificado é salvo assim que a célula for validade (se for estabelecido, o trigger On saving an existing record trigger é chamado) então o evento On Data Change é executado. A sequência típica de eventos gerados durante a entrada de dados ou modificação como abaixo:
A list box administra automaticamente a ordenação padrão de colunas em caso de clique no cabeçalho. Uma ordenação padrão é uma ordenação alfanumérica de valores da coluna, de forma alternada ascendente/descendente com cada clique. Todas as colunas sempre se sincronizam automaticamente. Nota: a propriedade “Ordenável” afeta apenas a ordenação do usuário padrão; o comandoLISTBOX SORT COLUMNS não considera esta propriedade. O valor da variável associada ao título da coluna lhe permite administrar informação adicional: a ordenação atual da coluna (leitura) e a visualização da flecha de ordenação.
É possível fixar o valor da variável (por exemplo, OBJECT SET FORMAT) para “forçar” a visualização da flecha de ordenação. A ordenação da coluna mesma não é modificada neste caso; está nas mãos do desenvolvedor como manejá-la. A gestão de seleções é realizada de maneira diferente para os list box de tipo array e de tipo seleção. • List box de tipo seleção: as seleções são administradas por intermédio de um conjunto chamado por padrão $ListboxSetX (X começa em 0 e se incrementa em função do número de list box no formulário), pode ser modificado se for necessário. Este conjunto é definido nas propriedades do list box. É mantido automaticamente por 4D: se o usuário seleciona uma ou mais filas no list box, o conjunto é atualizado imediatamente. Por outro lado, também é possível utilizar os comandos do tema "Conjuntos" com o propósito de modificar por programação a seleção da list box. • List box de tipo array: o comando SELECT LISTBOX ROW pode ser utilizado para selecionar por programação uma ou mais filas do list box. A variável associada ao objeto List box é utilizada para obter, fixar ou armazenar as seleções de filas do objeto. Cada elemento deste array contém True se a fila correspondente é selecionada e do contrário False. 4D atualiza os conteúdos deste array dependendo das ações do usuário. à inversa, você pode modificar o valor dos elementos deste array para modificar a seleção no list box. Por outra parte, não é possível inserir ou apagar filas neste array; tampouco é possível digitar filas novamente. Nota: o comando Count in Array pode ser utilizado para conhecer o número das filas selecionadas. Por exemplo, este método permite inverter a seleção desta primeira fila do list box (tipo array): ARRAY BOOLEAN(tBListBox;10) Nota: as especificações da gestão das seleções nos list box em modo hierárquico são detalhadas na seção Gestão de List Boxes Hierárquicas. É possível imprimir list boxes a partir de 4D v12. Estão disponíveis dos modos de impressão: modo pré-visualização, o qual pode permitir imprimir um list box como um objeto de formulário e o modo avançado, permite controlar a impressão do objeto list box mesmo dentro do formulário. Note que a aparência "Impressão" está disponível para os objetos list box no editor de formulários. A impressão de um list box em modo pré-visualização consiste em imprimir diretamente o list box com o formulário que o contenha utilizando os comandos de impressão padrão ou o comando de menu Print. O list box é impresso como está no formulário. Este modo não permite controlar com precisão a impressão do objeto; em particular, não permite imprimir todas as linhas de um list box que contenha mais linhas do que possa mostrar. Neste modo, a impressão dos list boxes é efetuada por programação, através do comando Print object (formulários de projeto e formuários de tabela são suportados). O comando LISTBOX GET PRINT INFORMATION é utilizado para controlar a impressão do objeto. Neste modo:
Há vários modos diferentes de configurar as cores de fundo, cores de fonte e estilos de fonte para os list boxes:
propriedades do objeto list box ou coluna, o uso de arrays ou métodos para o list box ou por coluna e definição a nível de células (se são de texto multi estilo). Quando uma mesma propriedade se define em mais de um nível, a ordem de prioridade é o seguinte:
Por exemplo, se define um estilo de caracteres nas propriedades do list box e outro utilizando um array de estilo para a coluna, será levado em conta este último. Dado um list box cujas filas tem uma cor alterno cinza/cinza claro, definido nas propriedades do list box. Um array de cor de fundo também foi definido para o list box com o propósito de mudar a cor das filas nas que pelo menos um valor é negativo por laranja: <>_BgndColors{$i}:=0x00FFD0B0 // orange A continuação, vamos a colorear os valores negativos de cor laranja escuro. Para isso , se define um array de cor de fundo para cada coluna, por exemplo ample <>_BgndColor_1, <>_BgndColor_2 and <>_BgndColor_3. Os valores destes arrays serão prioritários sobre os definidos nas propriedades do list box, assim como as do array geral de cor de fundo: <>_BgndColorsCol_3{2}:=0x00FF8000 // laranja escuro Pode obter o mesmo resultado utilizando os novos comandos LISTBOX SET ROW FONT STYLE e LISTBOX SET ROW COLOR. Tem a vantagem de que lhe permite evitar ter que pré definir os arrays de Para cada atributo (estilo, cor e cor de fundo), a herança se aplica quando se utiliza o valor por padrão:
Desta forma, se quiser que um objeto herde o valor do atributo de um nível superior, passe a constante lk inherited (valor por padrão) ao comando de definição ou diretamente no elemento do array de estilo/cor correspondente. Dado um listbox que contém um estilo de fonte padrão com cores alternativas: Pode realizar as modificações seguintes:
Pode estabelecer as propriedades de interface "escondido", "desativado" e "selecionável" para cada linha em uma list box baseada em array. Um array de controle de linha deve ser do tipo Inteiro Longo e inclui o mesmo número de linhas que as list box. Para saber mais, veja a sessão Propriedades específicas dos list Box. Cada elemento do array Row Control Array define o estatus da interface de sua linha correspondente no list box. Três propriedades de interfaces estão disponíveis usando constantes no tema de constante "List Box":
Para mudar o estatus da linha, precisa apenas estabelecer as constantes apropriadas ao elemento de array correspondente. Por exemplo, se não quiser que a linha #10 seja selecionável, pode escrever: aLControlArr{10}:=lk row is not selectable Pode definir diversas propriedades de interface ao mesmo tempo: aLControlArr{8}:=lk row is not selectable+lk row is disabled Note que estabelecer as propriedades para um elemento sobrepuja qualquer outro valor para este elemento (se não for resetado). Por exemplo: aLControlArr{6}:=lk row is disabled+lk row is not selectable //estabelece a linha 6 como desativada E não selecionável É possível por diretamente o resultado de uma petição SQL em um list box de tipo array. Esta função oferece um meio rápido de visualizar o resultado de petições SQL. Só podem ser utilizadas as petições de tipo SELECT. Este mecanismo não pode ser utilizado com uma base SQL externa.
Nota: As colunas adicionadas automaticamente estão relacionadas com as Variáveis Dinâmicas de tipo array. Esses arrays temporários permanecem enquanto o formulário existir. Uma variável temporária é criada do mesmo modo para cada título. Quando se chama o comando LISTBOX GET ARRAYS, o parâmetro arrVarCols contém ponteiros (apontadores) aos arrays temporários e o parâmetro arrVarTitulos contém os ponteiros às variáveis de títulos temporários. Se uma coluna adicionada é, por exemplo, a quinta coluna, seu nome é sql_column5 e seu título é sql_header5.
Queremos recuperar todos os campos da tabela PESSOAS e localizar seu conteúdo no list box cujo nome de variável é vlistbox. No método de objeto de um botão (por exemplo), é suficiente escrever: Begin SQL
Ver também
|
PROPRIEDADES
Produto: 4D
HISTÓRIA
Modificado: 4D v15 R4 ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||