Entre os novos recursos do próximo lançamento do Delphi, C ++ Builder e RAD Studio 10.4.2, o Embarcadero incluirá dois novos controles VCL, um controle de lista virtualizado e uma caixa de entrada numérica.
Aviso: esta postagem do blog cobre um produto não lançado, que está sujeito a alterações até o GA.
O lançamento do RAD Studio 10.4.2 está se aproximando e você pode participar de nosso seminário on-line de visualização amanhã, consulte https://blogs.embarcadero.com/whats-coming-in-10-4-2-sydney/ . Estas são algumas informações de pré-lançamento (ou blog beta) em uma área específica, novos controles VCL.
Table of Contents
Novo controle VCL TControlList
A Embarcadero está introduzindo na biblioteca VCL um novo controle de lista flexível e virtualizado. A ideia por trás desse controle é oferecer um novo controle VCL de aparência moderna, oferecendo configuração de UI personalizada e um controle de alto desempenho, que pode ser usado com listas muito longas. Esta lista representa uma única lista de seleção e todos os itens têm visualmente a mesma altura e largura.
O novo controle permite que o desenvolvedor defina o conteúdo projetando um dos elementos da lista usando controles gráficos (ou seja, descendentes do TGraphicControl) e forneça dados ao controle para exibir elementos individuais, sem criar todos os controles para todos os elementos na lista, mas apenas aqueles necessários para exibir os dados. Por ser totalmente virtual, a lista pode lidar com milhares e até milhões de itens, oferecendo uma rolagem extremamente rápida. Além de calcular e exibir apenas os itens que cabem na tela, a lista armazena em cache o conteúdo dos itens usando bitmaps na memória.
O novo controle lembra o controle TDBCtrlGrid clássico – há um painel para controles, você coloca controles nele e tem itens virtuais criados em tempo de execução. Ao contrário do DBCtrlGrid, podemos colocar apenas TGraphicControl nele e todos os itens são virtuais. Abaixo você pode ver o controle em tempo de design (com a superfície de um único item disponível para edição) e em tempo de execução (com o mesmo conteúdo multiplicado várias vezes).
Esta lista não inclui uma coleção de itens com informações específicas. Os dados podem ser fornecidos por meio de vínculos dinâmicos (incluindo vínculo a um conjunto de dados ou coleção de objetos) ou por meio de um evento para consultar os dados de um item individual (de modo que o armazenamento direto e o mapeamento sejam totalmente de responsabilidade do desenvolvedor) . Para cada item a ser exibido, o controle chama um manipulador de eventos que você pode usar para personalizar a aparência de cada item, neste caso apenas modificando a legenda do rótulo:
[crayon-676dae7167b9e253743772/]
Com o design anterior, 10.000 itens e várias colunas, esse código trivial produz uma saída como a abaixo:
Em tempo de design, há um diálogo especial com uma coleção de configurações predefinidas, que incluem ajuste para propriedades TControlList e coleções de controle com propriedades específicas. Use as setas na parte superior para escolher a configuração do núcleo e pode ajustá-la com algumas das outras opções da caixa de seleção na parte inferior. O assistente substitui a configuração da lista de controle.
O item que você projeta é replicado (virtualmente) para cada um dos itens solicitados com a propriedade ItemCount. A superfície visível do controle geralmente permite vários itens, todos com a mesma largura e altura. O controle possui 3 layouts diferentes:
- Único para uma única coluna de itens; nesse caso, a largura do item corresponderá à largura do controle.
- Multi Top to Bottom permite várias colunas e usará o espaço vertical disponível antes de passar para a próxima coluna, oferecendo rolagem vertical.
- Multi Left To Right também permite colunas múltiplas, mas usa um layout diferente e modo de rolagem horizontal (veja a imagem abaixo).
Em termos gerais, você pode usar o evento OnClick para qualquer controle na lista de controle. O controle suporta opções de alto DPI e estilos VCL e é totalmente habilitado para Live Bindings.
O novo componente TControlListButton
Não podemos usar TSpeedButton diretamente no painel, porque o controle não lida com interações especiais como o estado alterado do botão. Para controles, que podem ter diferentes estados, adicionamos uma classe TControlListControl especial (herdada de TGraphicControl). Você pode criar novos controles que herdam da classe TControlListControl e pode usar eventos de mouse para seus itens. Esta é a abordagem usada por TControlListButton – o análogo de um TSpeedButton que pode ser usado com TControlList. Este botão tem 3 estilos – botão de ação, botão de ferramenta e link.
Novo controle VCL TNumberBox
O novo controle VCL TNumberBox é um controle de entrada numérica de aparência moderna modelado após o controle WinUI NumberBox da plataforma Windows. O controle suporta a entrada de números inteiros, números de ponto flutuante com um determinado conjunto de dígitos decimais e formatação adequada e valores monetários:
O usuário pode aumentar ou diminuir o valor usando os botões de seta ou permitir as teclas ou a roda do mouse, e também aumentar e diminuir em um valor grande usando as teclas Page Up e Page Down. O componente inclui um botão giratório opcional (configurado com a propriedade SpinButtonOptions Placement), que pode ser compacto, embutido ou desativado, conforme mostrado aqui, respectivamente:
O componente também suporta avaliação de expressão simples; se habilitado, o usuário pode inserir uma expressão como 40 + 2 e o controle irá substituí-la pelo resultado. O controle suporta cálculos em linha de equações básicas, como multiplicação, divisão, adição e subtração (permitindo o uso de parênteses). Observe que você pode usar os símbolos + e – como operações binárias e unárias, então você pode digitar -23 ou + 23, você pode escrever 55 + 23 e 55-23, e até mesmo combiná-los como em 53 ++ 23 ou 53 –23, que é avaliado como 53 – (-23). assim, adiciona os dois valores.
Fique atento
É tudo por agora. Sintonize no webinar de visualização de amanhã e (uma vez lançado) baixe a versão de teste para experimentar esses novos controles VCL.