4D v15OBJECT GET COORDINATES |
||||||||||||||
|
4D v15
OBJECT GET COORDINATES
|
OBJECT GET COORDINATES ( {* ;} objeto ; esq; acima ; direita ; abaixo ) |
||
Originalmente introduzido em 4D v14 R5
Tema: Objetos (Formulários)
O comando OBJECT GET COORDINATES agora pode devolver as coordenadas de partes específicas do listbox, ou seja, colunas, cabeçalhos, rodapés de página, e não só as do objeto listbox pai.
Em versões anteriores, este comando sempre devolvia as coordenadas do listbox pai, independentemente da parte do listbox a que se aplique. A partir de 4D v14 R5, quando o parâmetro object referencia um cabeçalho, uma coluna ou um rodapé de página do listbox, as coordenadas devolvidas são as do sub-objeto listbox designado.
Pode utilizar esta nova funcionalidade, por exemplo, para mostrar um pequeno ícone na célula de cabeçalho de um listbox quando passar o cursor sobre ela, indicando ao usuário que pode fazer clique para mostrar um menu contextual.
Nota de compatibilidade: se utiliza este comando com um cabeçalho, uma coluna ou um rodapé de list box em suas aplicações existentes, as coordenadas devolvidas serão diferentes depois da conversão em 4D v14 R5 ou superior. Se deseja obter as coordenadas de todo o list box, é necessário mudar o código para que o comando seja chamado no próprio objeto listbox em vez de um sub-objeto.
Por razões de coerência, o marco de referência utilizado é o mesmo quando o objeto é um listbox ou um sub-objeto de list box: a origem é a esquina superior esquerda do formulário que contém o objeto. Para os sub-objetos listbox, as coordenadas devolvidas são teóricas; levam em conta o deslocamento aplicado ao list box antes de que ocorra um possível clipping. Como resultado, o sub-objeto pode que não seja visível (ou só parcialmente) em suas coordenadas, e estas coordenadas podem estar fora dos limites do formulário (ou inclusive ser negativas). Para averiguar se o sub-objeto é visível (e que parte é visível) é necessário comparar as coordenadas devolvidas com as coordenadas listbox, enquanto considera as seguintes regras:
Por exemplo, considere o seguinte gráfico, onde as coordenadas da coluna Capital são simbolizadas por um retângulo vermelho:
Como pode ver na primeira imagem, a coluna é maior que o listbox, pelo que suas coordenadas vão além do limite inferior do listbox, incluindo o rodapé de página. Na segunda imagem, o listbox foi deslocado, pelo que a coluna também foi movido "sob" as áreas da coluna Linguagem e de cabeçalho. Em qualquer caso, para calcular a parte visível real (zona verde), é necessário subtrair as áreas vermelhas.
Para as necessidades de sua interface, você deseja rodear a área na que o usuário fez clique com um retângulo vermelho:
No método objeto do listbox, pode escrever:
OBJECT SET VISIBLE(*;"rectangleInfo";False) //inicializar um retângulo vermelho
$ptr:=OBJECT Get pointer(Object current)
OBJECT GET COORDINATES($ptr->;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$lbx1;$lby1;$lbx2;$lby2)
If($lby1>$y1)|($lby2<$y2)&NBSP; // se a área na que é faz clique está fora do listbox
OBJECT SET VISIBLE(*;"Alert";True)&NBSP; // mostrar um alerta
Else
OBJECT SET VISIBLE(*;"Alert";False)
End if
O método devolve as coordenadas teóricas. Se o listbox é redimensionado, pode necessitar calcular o recorte para saber que parte é visível:
Produto: 4D
Tema: Language
4D v15 - Update (edição standard) ( 4D v15)