PDA

Ver la Versión Completa : scancode to char


droguerman
08-04-2007, 08:24:52
saludos a todos

existe alguna funcion que convierta el scancode de una tecla a su equivalente ASCII o al menos que determine si la tecla pulsada es un caracter??

de antemano gracias

d-hugo
08-04-2007, 15:24:16
Una forma un poco burda de detectar si la tecla es un caracter puede lograrse usando el evento onKeyPress con un case. Algo más o menos así:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case ord(key) of
65..90: begin
// entre A y Z mayúscula
end;
97..122: begin
// entre a y z minúscula
end;
else begin
// para el resto
end;
end;
end;
Puede que no sea el método más eficiente, pero es relativamente simple de usar, lo único que hay que hacer es buscar los códigos ASCII para las letras que deseas filtrar, pero eso es fácil con el mapa de caracteres de Windows (que por cierto, en el caso de Windows XP da los valores en hexadecimal, pero pueden convertirse fácilmente a decimal con la calculadora científica)

Saludos, Hugo

droguerman
08-04-2007, 16:00:46
bueno mas sencillo en ese caso es usar la función chr, lo que preguntaba es si conociendo el scancode de una tecla por ejemplo de 4 en el teclado numerico que está representado en delphi por la constante VK_NUMPAD4 era posible obtener el ascii de 52 (4) o conociendo una tecla cuyo código está representado por VK_SPACE es posible haya el equivalente que es 32.

d-hugo
08-04-2007, 17:00:09
Ya te entiendo.
Algo más o menos así:

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
ascii: byte;
begin
ascii:=MapVirtualKey(key, 2);
end;
Por cierto, para distinguir si las letras son mayúsculas, minúsculas o están acentuadas, creo que vas a necesitar sumergirte un poco más en las APIs de Windows.

droguerman
08-04-2007, 17:46:42
ah que hábil, muchisimas gracias era justo lo que necesitaba :D