PDA

Ver la Versión Completa : ¿cómo hago para saber que tecla se presionó?


franroju
12-06-2012, 16:17:32
Hola gente. Se que hay varios hilos creados con el problema que voy a describir, pero no me han solucionado, o mi capacidad mental no me permite comprender las soluciones que les han dado a los demás, je.

La situación es la siguiente: Estoy usando delphi 7, y tengo un DBGrid al cual quiero que si se presiona la tecla Supr, elimine un registro de la tabla.
Para eso, en el envento OnKeyDown del DBGrid puse lo siguiente:
procedure TForm6.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = 127) then
eliminarRegistro;
end;


No funcionó. Probe ponerlo en el OnKeyPress cambiando la condición por #127 pero tampoco funcionó. Luego debuggee el código, mostre en pantalla el valor del parámetro Key y resulto ser el número 46. Pero según el código ASCII es el 127.

Entonces mi duda es, ¿cómo hago para saber que tecla se presionó?. Pregunto en general porque también tengo unos Edits los cuales quiero que ingrese sólo números y necesitaría el mismo procedimiento.

En el caso de la tecla Supr, si yo pregunto: if (key = 46) then me va a funcionar en cualquier teclado??.

Muchas gracias y espero puedan orientarme un poco sobre el funcionamiento.

franroju
12-06-2012, 16:31:56
Ja, el título dice una cosa y el post habla de otra. Sepan disculpar, iba a preguntar lo de los Edit, y después cambié y me olvidé de modificar el título.

En fin, la situación es básicamente la misma.

Saludos

ecfisa
12-06-2012, 18:03:32
Hola franroju.

En el código que pusiste sería:

procedure TForm6.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_DELETE then
eliminarRegistro;
end;

Para la totalidad de códigos, busca en la ayuda de Delphi por Virtual key codes.

Saludos.

franroju
12-06-2012, 21:17:39
Gracias eficsa, tema solucionado... ya había probado con las constantes de Windows, pero no se por qué no las tomaba. Está la unidad en la parte de los Uses pero no funcionaba, asi que ahora directamente hago refercia a ellas de la forma:

Windows.VK_DELETE