terça-feira, 16 de dezembro de 2008

Converter caracteres para maiúsculo

Navegando nas listas de discussão da Web, encontrei a seguinte dúvida de um programador:
-> Tenho um componente DBMemo, e na medida que vou digitando nele, quero que o texto vá aparecendo em maiúsculo, como fazer?

Bom, parece ser bem simples, usando UpperCase, onde poderíamos colocar no evento KeyPress o código:
procedure TForm1.DBMemo1KeyPress(Sender: TObject; var Key: Char);
begin
Key := UpCase(key);
end;

Bom, fazendo um teste e digitando "avião", aparece na tela escrito dessa forma: "AVIãO", e o ã, porque não foi convertido?
O ã é um caractere ANSI, e precisa ser tratado de uma forma um pouco diferente, como um caracter ANSI, e como converter?
Em uma nova codificação, basta que seja alterado o comando de transformação de UpCase para AnsiUpperCase, assim:
procedure TForm1.DBMemo2KeyPress(Sender: TObject; var Key: Char);
begin
Key := AnsiUpperCase(key)[1];
end;

O "[1]" no final significa que estamos copiando 1 caracter da String, ou seja, convertendo String para Char. Agora ao digitarmos novamente a mesma palavra, teremos "AVIÃO", onde todas as letras, acentuadas ou não, foram transformadas para maiúsculas. Até a próxima.

4 comentários:

Steve Narancic disse...

não seria mais facil alterar a propriedade charcase?

Maikel Scheid disse...

Não. A propriedade Charcase não está disponível nesta situação para este tipo de componente (DBMemo), portanto, precisa ser simulada.

Anônimo disse...

Mt boa a sua dica...eu havia tentado algo parecido, mas sem sucesso.

Stipa disse...

Excelente! 4 anos após sua postagem foi útil para mim, obrigado!

Leandro