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:
não seria mais facil alterar a propriedade charcase?
Não. A propriedade Charcase não está disponível nesta situação para este tipo de componente (DBMemo), portanto, precisa ser simulada.
Mt boa a sua dica...eu havia tentado algo parecido, mas sem sucesso.
Excelente! 4 anos após sua postagem foi útil para mim, obrigado!
Leandro
Postar um comentário