4D v16.3Gestão de objetos List Box |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Gestão de objetos List Box
|
Comandos Prop. dos objetos | Objeto | Colunas | Cabeçalho da coluna | Rodapé de colunaOBJECT MOVE | X | ||
OBJECT MOVE | X | ||||||
OBJECT GET COORDINATES | X | X | X | X | |||
OBJECT SET RESIZING OPTIONS | X | ||||||
OBJECT GET RESIZING OPTIONS | X | ||||||
OBJECT GET BEST SIZE | X | ||||||
SET FILTER | X | ||||||
OBJECT SET FORMAT | X | X | |||||
OBJECT SET ENTERABLE | X | ||||||
OBJECT SET LIST BY NAME | X | ||||||
OBJECT SET TITLE | X | ||||||
OBJECT SET COLOR | X | X | X | X | |||
OBJECT SET RGB COLORS | X | X | X | X | |||
OBJECT SET FONT | X | X | X | X | |||
OBJECT SET FONT SIZE | X | X | X | X | |||
OBJECT SET FONT STYLE | X | X | X | X | |||
OBJECT SET HORIZONTAL ALIGNMENT | X | X | X | X | |||
OBJECT Get horizontal alignment | X | X | X | X | |||
OBJECT SET VERTICAL ALIGNMENT | X | X | X | X | |||
OBJECT Get vertical alignment | X | X | X | X | |||
OBJECT SET VISIBLE | X | X | X | X | |||
OBJECT SET SCROLLBAR | X | ||||||
OBJECT SET SCROLL POSITION | X |
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.
Note que a fim de você poder gerenciar a visibilidade desses objetos utilizando o comando OBJECT SET VISIBLE eles devem ter sido exibidos na listbox no nível do editor de formulários (as opções mostrar título e/ou mostrar rodapé devem ser selecionadas para o objeto).
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.
Devolvem um ponteiro ao list box, a coluna(1) list box ou a variável do cabeçalho em função do tipo de evento de formulário. A seguinte tabela detalha este funcionamento:
Evento | Objeto foco | Objeto atual |
On Clicked | list box | coluna |
On Double Clicked | list box | coluna |
On Before Keystroke | coluna | coluna |
On After Keystroke | coluna | coluna |
On After Edit | coluna | coluna |
On Getting Focus | coluna ou list box (*) | coluna ou list box (*) |
On Losing Focus | coluna ou list box (*) | coluna ou list box (*) |
On Drop | list box source | list box (*) |
On Drag Over | list box source | list box (*) |
On Begin Drag Over | list box | list box (*) |
On Mouse Enter | list box (**) | list box (**) |
On Mouse Move | list box (**) | list box (**) |
On Mouse Leave | list box (**) | list box (**) |
On Data Change | coluna | coluna |
On Selection Change | list box (**) | list box (**) |
On Before Data Entry | coluna | coluna |
On Column Moved | list box | coluna |
On Row Moved | list box | list box |
On Column Resize | list box | coluna |
On Open Detail | Nil | list box (**) |
On Close Detail | Nil | list box (**) |
On Header Click | list box | cabeçalho |
On After Sort | list box | cabeçalho |
(*) 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)
` $Column contem um ponteiro a col2
$Fila:=$Column-> `$Fila igual a 5
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
:(Form event=On Before Data Entry) // uma célula recebe o foco
LISTBOX GET CELL POSITION(*;"lb";$col;$row)
// identificación de la celda
If(arrDate{$row}<Current date) // se a data é anterior aos dias de hoje
$0:=-1 // a célula não é editável
Else
// Caso contrário, a célula é editável
End if
End case
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ção | Sequência de eventos |
Uma célula muda para modo editar | On Before Data Entry / On Getting Focus |
seu valor é modificado | On Before Keystroke / On After Keystroke / On After Edit |
Um usuário valida e deixa a célula (tab, clique, etc.) | Save (On saving an existing record trigger) / On Data Change / On Losing Focus |
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.
Pode evitar as ordenações de usuário deselecionando a propriedade “Ordenável” do list box.
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.
Esta variável corresponde a um array de booleanos que é criada e mantida automaticamente por 4D. O tamanho deste array é determinado pelo tamanho do list box: contém o mesmo número de elementos que o array mais pequeno associado às colunas.
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)
` tBListBox é o nome da variável associada ao list box no formulário
If(tBListBox{1}=True)
tBListBox{1}:=False
Else
tBListBox{1}:=True
End if
É 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:
Quando uma mesma propriedade se define em mais de um nível, a ordem de prioridade é o seguinte:
Prioridade elevada | Célula (se texto multi estilo) |
Array/métodos de coluna | |
Array/métodos de listbox | |
Propriedades da coluna | |
Prioridade baixa | Propriedades do list box |
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
<>_BgndColors{$i}:=-255 // valor por padrão
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
<>_BgndColorsCol_2{5}:=0x00FF8000
<>_BgndColorsCol_1{9}:=0x00FF8000
<>_BgndColorsCol_1{16}:=0x00FF8000
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
estilo/cor das colunas: são criados dinamicamente pelos comandos.
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.
Estas configurações podem ser gerenciadas usado o Row Control Array, que pode designar usando o comando LISTBOX SET ARRAY ou através da lista de Propriedades:
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":
Constante | Tipo | Valor | Comentário |
lk row is disabled | Inteiro longo | 2 | A linha correspondente se desativa. O texto e os controles tais como caixas de seleção são atenuadas ou ficam cinza. As áreas de entrada de texto editáveis já não são editáveis Valor como padrão: Ativado |
lk row is hidden | Inteiro longo | 1 | A linha correspondente está oculta. Ocultas as linhas só afeta a visualização do list box. As linhas ocultas continuam presentes nos arrays e podem ser manipuladas por programação. Os comandos da linguagem, mais concretamente LISTBOX Get number of rows ou [#cmd id="971"/], não levam em consideração o estado visível/oculto das linhas. Por exemplo, em um list box com 10 linhas onde as primeiras 9 linhas são ocultadas, LISTBOX Get number of rows devolve10. Desde o ponto de vista do usuário, a presença de linhas ocultas em um list box não é facilmente discernível. Só linhas visíveis podem ser selecionadas (por exemplo usando o comando Selecionar tudo). Valor pré-determinado: Visível |
lk row is not selectable | Inteiro longo | 4 | A linha correspondente não pode ser selecionada (ressaltar a linha não é possível). As áreas de entrada de texto editáveis já não são editáveis a menos que a opção "Editar em clique único" esteja ativada. Os controles tais como caixas de seleção e listas continuam sendo funcionais entretanto. Este parâmetro é ignorado se o modo de seleção do list box é "Nenhum". Valor como padrão: selecionável. |
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
aLControlArr{6}:=lk row is disabled //estabelece a linha 6 como desativada mas novamente 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.
Isso funciona de acordo com os seguintes princípios:
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.
Begin SQL
SELECT * FROM PEOPLE INTO <<vlistbox>>
End SQL
Produto: 4D
Tema: List Box
Modificado: 4D v15 R4
Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)