Delphi: A propriedade Width dos componentes TDBText é uma farsa

Publicado por Marcos Dell Antonio em 12/02/2007 | Delphi

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é +. :)

1 comentário

  1. 1
    Carolini // February 29th, 2008 at 1:32 am

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

    Obrigada!!!

    =D

Deixe o seu comentário

Anúncios

Anúncio provido pelo BuscaPé