BLOG
FILTROS
TAGS MAIS USADAS
-
AUTOR
Afonso Junior
TAGs desenvolvimento, windows mobile sdk
0 COMENTÁRIOS-
Tweet
Quem já programou para iPhone conhece as facilidades que o Interface Builder fornece para fazer as suas telas. Para quem tem a árdua missão de elaborar as mesmas interfaces para Windows Mobile, não vai encontrar todas essas facilidades, o que pode prejudicar e muito o desenvolvimento e, consequentemente, a experiência do usuário.
Para exemplificar o que digo, mostro a vocês um problema que tive em Windows Mobile, que na teoria deveria ser bem fácil resolver: uma label que pode receber conteúdo dinâmico (acontece toda hora) e que o seu container deve ser redimensionado de acordo com esse conteúdo; se ele tiver que ter duas linhas, que aumente o seu tamanho para comportar duas. Se tiver três, que aumente mais um pouco.
Isso deveria ser tranquilo, certo? Errado. Ao pesquisar sobre como fazer isso, até descobri que há como fazer em C#, utilizando o método Graphics.MeasureString; porém, como muitas funcionalidades que a gente acha fuçando no Google, essa é mais uma que não está disponível para o Compact Framework.
Com o desânimo já batendo à porta, achamos em um dos últimos links procurados um site na Argentina de um desenvolvedor que implementou uma classe para tratar disso em Windows Mobile. Como sempre, pegamos a implementação dele, incorporamos ao nosso código, e colocamos de maneira mais fácil de ser utilizada.
Primeiro, baixe esse arquivo, que contém a definição da classe que iremos utilizar. Ela contém o código que faz toda a mágica. Chamo a atenção para o seguinte método:
internal static int GetLabelSize(Label label, Graphics graphics) {
return CFMeasureString.MeasureString(graphics, label.Text, label.ClientRectangle, false).Height;
}
Com ele, basta você passar a label que você deseja saber a altura (height), usando o seguinte código:
minhaLabel.Height = CFMeasureString.GetLabelSize(minhaLabel, CreateGraphics());
O método CreateGraphics() é interno a um Form, de forma que a utilização da linha acima deve ser feita preferencialmente no formulário. Convém dizer que o GetLabelSize não funciona com todas as implementações de Label, como, por exemplo, o transparent label. Mas já quebra o maior galho :P.





+55 21 3553-1898