Delphi: A propriedade Width dos componentes TDBText é uma farsa
Para que serve a propriedade Width se não para indicar qual é o tamanho do componente?
Ao utilizar um TDBText dentro de um TDBCtrlGrid, o Width do primeiro não se altera conforme o conteúdo. Por exemplo, o componente mantém o mesmo Width para os textos “Teste” e “Testeeeeeeeee”.
Isso a princípio está correto, pois não é possível habilitar o AutoSize do TDBText dentro de um TDBCtrlGrid.
Agora imagine a seguinte situação: você tem uma TDBCtrlGrid com dois TDBText na mesma linha (Top igual). O tamanho da fonte de ambos é configurável, ou seja, pode aumentar e diminuir. Conforme o usuário altera o tamanho, a posição do segundo componente deve mudar, pois se ele aumentar a fonte, o primeiro aumentará de tamanho e, logo, o segundo deverá ir mais para a esquerda.
Ok, até aqui nada demais. No entanto, a forma mais lógica para resolver este problema, que é alterar o Left do segundo componente conforme o Width do primeiro, não funciona. Veja:
1 lblComp2.Left := lblComp1.Left + lblComp1.Width + 3;
Tendo em vista que o Width do primeiro componente nunca muda, pois o AutoSize não pode ser habilitado, o Left do segundo componente permanecerá fixo também e então ele irá sobrepor o primeiro.
A solução mais prática que achei para este problema foi manipular o Width dos componentes manualmente. Esta alteração é feita com base na quantidade de caracteres que o campo tem no momento. A fórmula usada foi essa:
1 label1.Width := 2 Round((label1.Font.Size * label1.GetTextLen * 8) / 10);
Com isso, a primeira fórmula (utilizando o Left + Width) funcionará, pois agora o tamanho dos componentes está de acordo com seu conteúdo.
É isso ae. Até +.




Oi …
Alguém pode m passar algo sobre (Propiedades de um componente) é que procurei sobre e não achei nada especificado…
Obrigada!!!
=D