Problema com OnKeyUp

Delphi

07/02/2005

Olá pessoal.
Tenho um problema com o evento onkeyup do dbgrid. Para verificar se a tecla digitada em uma celula do dbgrid é numero ou letra eu usava o evento onkeypress, que funcionava perfeitamente.
if Key in [´A´..´Z´, ´a´..´z´] then
...
o unico problema é que ele é disparado antes de o dbgrid informar ao dataset se a operação é insersão ou edição. Pra resolver isso eu usei o evento onkeyup, que se encaixou como uma luva. o problema é que o jeito do onkeyup tratar a tecla pressionada é diferente do jeito do onkeypress. O onkeypress trata o caracter da tecla como um char, facilitando a comparação. Já o onkeyup trata a tecla pressionada como um codigo ascii, dificultando a comparação.
A função chr retorna o caracter equivalente ao codigo ascii da tecla, sendo assim eu fiz o seguinte teste:
if Chr(Key) in [´A´..´Z´, ´a´..´z´] then
...
que funciona, mas tem varios bugs. Ex.: As tecla de função (F1, F2, ...) são interpretadas como letras, assim como os numero do teclado numerico.
Alguem sabe um modo mais eficiente de se fazer esta comparação?
Agradeço antecipadamente.


Flaviosan

Flaviosan

Curtidas 0

Melhor post

Flaviosan

Flaviosan

07/02/2005

Outra coisa a variavel caracter tem que ser global.
Bye.


GOSTEI 1

Mais Respostas

Flaviosan

Flaviosan

07/02/2005

Desculpe o flood, mas estou precisando muito de uma resposta.
Uma dica: usar os os caodigos ascii pras teclas de letras não funciona
if Key in [65..90, 97..122] then
...



GOSTEI 0
Marcelo Saviski

Marcelo Saviski

07/02/2005

não é a melhor foma, mas

crie uma [color=blue:c7ae6f29e8]variavel [/color:c7ae6f29e8]do tipo Char

Caracter: Char;


no [color=blue:c7ae6f29e8]OnKeyPress[/color:c7ae6f29e8], faça

Caracter := Key;


no on [color=blue:c7ae6f29e8]KeyUp[/color:c7ae6f29e8]

if Caracter in [´a´..´z´, ´A´..´Z´] then
 (...)



GOSTEI 1
Flaviosan

Flaviosan

07/02/2005

Obrigado Marcelo, matou a pau!
Essa ideia me passou pela cabeça, mas como vc disse, não é a melhor solução e nem tentei implementa-la.
Valeu!


GOSTEI 0
POSTAR