Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
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 | ||||||
OBJECT SET FILTER | X | ||||||
OBJECT SET FORMAT | X | X | |||||
OBJECT SET ENTERABLE | X | ||||||
OBJECT SET LIST BY NAME | X | ||||||
OBJECT SET TITLE | X | ||||||
_o_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 | ||||||
OBJECT SET HELP TIP | X | X | X | ||||
OBJECT Get help tip | X | X | 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 Footer Click | list box | rodapé |
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 de Usuário") dispara a atualização dos dados mostrados na list box.
Nota: O comando REDRAW não é compatível com list box do tipo seleção de entidades
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 que uma célula de list box seja editável 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 e seleção de entidades, qualquer registro modificado é salvo assim que a célula for validade:
A sequência típica de eventos gerados durante a entrada de dados ou modificações está abaixo
Ação | Sequência de eventos | |
Uma célula muda para modo editar | All | On Before Data Entry |
All | On Getting Focus | |
Esse valor é modificado | All | On Before Keystroke |
All | On After Keystroke | |
All | On After Edit | |
Um usuário valida e deixa a célula | Selection list boxes | Save |
Record selection list boxes | On saving an existing record trigger (se estabelecido) | |
Selection list boxes | On Data Change(*) | |
Entity selection list boxes | Entidade é salva com opção autofusão, fechamento otimista (ver [#title id="9310"/]). No caso de salvar com sucesso, a entidade é recarregada com a a última atualização. Se a operação de salvar falha, um erro é exibido | |
All | On Losing Focus |
Nota: Entrada de dados em list boxes do tipo coleção tem um limite quando as expressões avaliadas sejam null. Neste caso, não é possível editar ou remover o valor null na célula.
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 Coleção/Seleção de entidades: Seleções são gerenciadas através de propriedades de list box dedicadas: Item atual é um objeto que vai receber a entidade/elemento selecionado. Itens selecionados é uma coleção de itens selecionados, e Posição Item atual retorna a posição do elemento ou entidade selecionado. Para saber mais veja Tema Fonte de dados.
• List box de tipo array: o comando LISTBOX SELECT 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 | |
Propriedades de List box | |
Prioridade baixa | Expressão de Meta info (para coleção de seleção de entidades list boxes |
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
Quando a opção Hide selection highlight for marcada (ver Tema aparência ) , é preciso fazer as seleções de list box visíveis usando opções de interface disponíveis. Já que seleções ainda são totalmente gerenciadas por 4D, isso significa que:
Pode definir as cores de fundo específicas, cores de fonte e estilos de fonte por programação para personalizar a aparência de linhas selecionadas. Isso pode ser feito usando arrays ou expressões, dependendo do tipo de list box sendo exibida (ver seções abaixo).
Nota:Pode usar a constante lk inherited para mimetizar a aparência atual da list box (por exemplo, cor de fonte, cor de fundo, estilo de fonte, etc). Para saber mais sobre como a constante lk inherited funciona, veja a seção Herança.
Para determinar que linhas foram selecionadas, deve marcar se estão incluídas no conjunto indicado pela proriedade de list box Highlight Set:
Pode então definir a aparência de linhas selecionadas usando uma ou mais das expressões abaixo especificadas na Lista de Propriedades:
Nota: Lembre que expressões são automaticamente reavalidas cada vez que:
Quebra de linhas não podem ser ressaltadas quando a opção Hide selection highlight estiver marcada.
Já que não é possível ter cores diferentes para cabeçalhos no mesmo nível, não há maneira de ressaltar uma quebra de linha específica por programação.
Tem que analisar a variável array Booleana associada com o list box para determinar cujas linhas são selecionadas ou não selecionadas:
Pode então definir a aparência das linhas selecionadas usando um ou mais dos arrays abaixo especificados na Lista de Propriedades:
Nota que list box arrays usados para definir a aparência de linhas selecionadas devem ser recalculados durante o evento de formulário On Selection Change ; entretanto, pode também modificar esses arrays baseados nos formulários abaixo:
...dependendo se e quando quiser visualmente representar mudanças de foco em seleções.
Se escolheu esconder o ressaltado de sistema e quer exibir seleções de list box com uma cor de fundo verde, como no exemplo:
Para um array tipo list box, precisa adicionar um método de objeto para atualizar a propriedade Row Background Array:
Neste método de objeto pode escrever:
Case of
:(FORM Event=On Selection Change)
$n:=Size of array(LB_Arrays)
ARRAY LONGINT(_ListboxBackground;$n) // cores de fundo da linha
For($i;1;$n)
If(LB_Arrays{$i}=True) // selecionado
_ListboxBackground{$i}:=0x0080C080 // fundo verde
Else // não selecionado
_ListboxBackground{$i}:=lk inherited
End if
End for
End case
Para um list box de tipo seleção, para produzir o mesmo efeito pode usar um método para atualizar a Background Color Expression baseado no conjunto especificado na propriedade Highlight Set. Por exemplo:
No método UI_SetColor pode escrever:
If(Is in set("$SampleSet"))
$color:=0x0080C080 // fundo verde
Else
$color:=lk inherited
End if
$0:=$color
É 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 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
Customize Highlight Color (4D blog)
Download HDI database
Tutoriaux sur les list box
Produto: 4D
Tema: List Box
Modificado: 4D v15 R4
Modificado: 4D v16 R2
Modificado: 4D v17
Manual de linguagem 4D ( 4D v20)
Manual de linguagem 4D ( 4D v20.1)
Manual de linguagem 4D ( 4D v20.2)
Manual de linguagem 4D ( 4D v20.3)
Manual de linguagem 4D ( 4D v20.4)
Manual de linguagem 4D ( 4D v20.5)
Manual de linguagem 4D ( 4D v20.6)