Skip to content

Delphi Keydown

Qué programador no ha necesitado alguna vez controlar las pulsaciones del teclado?.

Para este tipo de control, tenemos un evento llamado TWinControl.OnKeyDown.

El evento KeyDown, se hereda de TWinControl en aplicaciones VCL, mientras que en Android se hereda desde FMX.Controls.TControl.

OnKeyDown se utiliza para especificar un procesamiento distinto al natural, que se llamará cuando se presiona una tecla del teclado y mouse, incluidas las teclas de función y las combinadas con las teclas Shift, Ctrl y Alt, mientras el objeto posee el foco.

Declaración del evento OnKeyDown

procedure onKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

En el evento OnKeyDown, tenemos tres parámetros de tipo TKeyEvent que detallamos a continuación:

  • Sender: Nos envía el TObject desde donde se está ejecutando el evento.
  • Key: De tipo Word, obtenemos el código de la Tecla que se está presionando.
  • Shift: Obtenemos el estado de las teclas Shift, Ctrl, Alt y mouse.

Ejemplo de uso del evento OnKeyDown

En el siguiente ejemplo, utilizamos el evento onKeyDown del formulario principal, detectando su el usuario presiona la tecla Escape.

Si lo hace, realizamos la pregunta si desea cerrar el programa, y si responde que si, terminamos la ejecución de la aplicación.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key=VK_ESCAPE then
  begin
    if MessageDlg('Desea cerrar el programa?',
    mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
    begin
      Application.Terminate;
    end;
  end;
end;

Virtual Key Codes, provenientes del parámetro Key de tipo Word

vk_BackSpace = 8
vk_Tab = 9
vk_Return = 13
vk_Command = 15 (M)
vk_Shift = 16
vk_Control = 17
vk_Alt = 18
vk_Pause = 19
vk_CapsLock = 20
vk_Escape = 27
vk_Space = 32
vk_PageUp = 33
vk_PageDown = 34
vk_End = 35
vk_Home = 36
vk_Left = 37
vk_Up = 38
vk_Right = 39
vk_Down = 40
vk_PrintScreen = 44
vk_Insert = 45
vk_Delete = 46

vk_0 = 48
vk_1 = 49
vk_2 = 50
vk_3 = 51
vk_4 = 52
vk_5 = 53
vk_6 = 54
vk_7 = 55
vk_8 = 56
vk_9 = 57

vk_A = 65
vk_B = 66
vk_C = 67
vk_D = 68
vk_E = 69
vk_F = 70
vk_G = 71
vk_H = 72
vk_I = 73
vk_J = 74
vk_K = 75
vk_L = 76
vk_M = 77
vk_N = 78
vk_O = 79
vk_P = 80
vk_Q = 81
vk_R = 82
vk_S = 83
vk_T = 84
vk_U = 85
vk_V = 86
vk_W = 87
vk_X = 88
vk_Y = 89
vk_Z = 90

vk_LWin = 91 *
vk_RWin = 92 *
vk_Apps = 93 *

vk_NumPad0 = 96
vk_NumPad1 = 97
vk_NumPad2 = 98
vk_NumPad3 = 99
vk_NumPad4 = 100
vk_NumPad5 = 101
vk_NumPad6 = 102
vk_NumPad7 = 103
vk_NumPad8 = 104
vk_NumPad9 = 105

vk_Multiply = 106
vk_Add = 107
vk_Subtract = 109
vk_Decimal = 110
vk_Divide = 111

vk_F1 = 112
vk_F2 = 113
vk_F3 = 114
vk_F4 = 115
vk_F5 = 116
vk_F6 = 117
vk_F7 = 118
vk_F8 = 119
vk_F9 = 120
vk_F10 = 121
vk_F11 = 122
vk_F12 = 123
vk_F13 = 124
vk_F14 = 125
vk_F15 = 126
vk_F16 = 127

vk_NumLock = 144
vk_ScrollLock = 145
vk_LShift = 160 **
vk_RShift = 161 **
vk_LControl = 162 **
vk_RControl = 163 **
vk_LAlt = 164 **
vk_RAlt = 165 **
vk_SemiColon = 186
vk_Equals = 187
vk_Comma = 188
vk_UnderScore = 189
vk_Period = 190
vk_Slash = 191
vk_BackSlash = 220
vk_RightBrace = 221
vk_LeftBrace = 219
vk_Apostrophe = 222

* Disponible en 95/NT4 únicamente.
** Disponible en 2000/XP/Vista únicamente.
(M) Disponible en Macintosh únicamente.

TShiftState Type, provenientes del parámetro Shift

  • ssShift: La tecla Shift se mantiene presionada.
  • ssAlt: La tecla Alt se mantiene presionada.
  • ssCtrl: La tecla Ctrl se mantiene presionada.
  • ssLeft: El botón izquierdo del mouse se mantiene presionado.
  • ssRight: El botón derecho del mouse se mantiene presionado.
  • ssMiddle: El botón central del mouse se mantiene presionado.
  • ssDouble: Se hizo doble clic en el mouse.