Depois de examinar as expressões de associação e como elas podem se vincular aos componentes, vamos passar para o componente voltado para o gerenciamento de expressões de associação.
Em postagens recentes no blog, cobri o mecanismo de expressão principal RTL do Delphi e a vinculação de componentes . Agora podemos dar uma etapa adicional e examinar um componente-chave para toda a arquitetura de bindings, chamado BindingsList. Uma lista de vinculação é uma coleção de diferentes tipos de expressões de vinculação, gerenciadas pelos designers.
Em outras palavras, as expressões e associações de componentes que defini no código-fonte na última postagem do blog podem ser totalmente definidas nos designers (e assistentes) do componente BindingsList. Basta soltar um componente desse tipo em um formulário mais alguns componentes visuais (no meu exemplo, duas edições, uma edição giratória e uma barra de progresso – veja a imagem abaixo).
O componente BindingsList possui um designer que permite definir uma coleção de ligações. Cada ligação pode ser escolhida usando uma das muitas opções disponíveis (muitas para explorar neste artigo e focada principalmente em ligações de fonte de dados e campo de dados). As duas opções básicas que vou usar aqui são TBindExpression e TBindExprItems.
Depois de selecionar uma dessas ligações, digamos uma TBindExpression, você precisa interagir com duas superfícies de design diferentes para trabalhar na expressão: de um lado, você pode configurar as propriedades da expressão no Inspetor de objetos, como o SourceComponent e o ControlComponent (o uso do termo para se referir ao controle de destino) e às expressões relacionadas; por outro, clicando duas vezes na expressão no editor BindingList, você pode nos abrir um designer de expressão especial, que por sua vez tem editores e visualizadores de itens adicionais:
Na imagem acima, você pode ver que conectei a expressão a um controle de origem e destino, mas ainda não defini uma expressão. Isso pode ser tão simples quanto um único nome de propriedade ou uma combinação mais complexa de valores e expressões e pode ser configurado nas propriedades de expressões do Inspetor de Objetos para a vinculação ou no designer especial exibido acima. O designer também oferece a opção de avaliar e inspecionar diferentes expressões.
Voltando às expressões, podemos simplesmente usar Value e Position para Spin Edit e Progress Bar, respectivamente. Observe que a expressão de vinculação tem uma direção (por padrão, fonte para controle) que pode ser revertida ou bidirecional.
Usei uma expressão bidirecional para as duas caixas de edição, de modo que digitar em qualquer uma delas copia o conteúdo para a outra. Neste segundo exemplo, usei uma ligação TBindExprItems (mas uma expressão regular teria sido suficiente). Esta é uma ligação mais complexa, na qual você especifica a origem e o controle (como acima), mas define uma coleção de expressões claras e de formato, que podem envolver várias propriedades dos controles. Neste exemplo, o mapeamento é Texto para Texto (bidirecional), como você pode ver abaixo:
Com tudo isso, o único código Delphi necessário no aplicativo é uma chamada para reavaliar as ligações quando o valor da fonte muda. Isso é feito facilmente manipulando os eventos OnChange dos vários controles e disparando uma atualização geral das ligações para o controle atual (o Remetente ):
[crayon-6766431543fea277001715/]
Este é o aplicativo muito simples em ação:
Agora você pode estar se perguntando onde todas essas definições de configuração vão parar … mas como a maioria das outras configurações de tempo de design no Delphi, não é um preto para um arquivo de formulário que você pode ver como texto (e editar, se você sabe o que está fazendo) . Você também pode copiar o componente do designer e colá-lo como texto, como fiz aqui:
[crayon-6766431543ff1158539042/]
Isso é tudo por enquanto, mesmo se eu perceber que apenas arranhei a superfície da arquitetura das ligações. A próxima etapa desta série sobre expressões e associações são os designers do Visual Live Binding, que se baseia nas peças que vimos até agora. Vou cobrir na próxima vez.