在OnKeyDown事件中检索VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT,然后在处理就行了。

解决方案 »

  1.   

    procedure TfmBSOutWh.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key=Chr(VK_DOWN) then ShowMessage('Pass');
    end;我按了DownArrow,但没显示'Pass'。
      

  2.   

    查查帮助:Virtual Key CodeVirtual Key Code Corresponding keyVK_LBUTTON Left mouse button
    VK_RBUTTON Right mouse button
    VK_CANCEL Control+Break
    VK_MBUTTON Middle mouse button
    VK_BACK Backspace key
    VK_TAB Tab key
    VK_CLEAR Clear key
    VK_RETURN Enter key
    VK_SHIFT Shift key
    VK_CONTROL Ctrl key
    VK_MENU Alt key
    VK_PAUSE Pause key
    VK_CAPITAL Caps Lock key
    VK_KANA Used with IME
    VK_HANGUL Used with IME
    VK_JUNJA Used with IME
    VK_FINAL Used with IME
    VK_HANJA Used with IME
    VK_KANJI Used with IME
    VK_CONVERT Used with IMEVK_NONCONVERT Used with IME
    VK_ACCEPT Used with IME
    VK_MODECHANGE Used with IME
    VK_ESCAPE Esc key
    VK_SPACE Space bar
    VK_PRIOR Page Up key
    VK_NEXT Page Down key
    VK_END End key
    VK_HOME Home key
    VK_LEFT Left Arrow key
    VK_UP Up Arrow key
    VK_RIGHT Right Arrow key
    VK_DOWN Down Arrow key
    VK_SELECT Select key
    VK_PRINT Print key (keyboard-specific)
    VK_EXECUTE Execute key
    VK_SNAPSHOT Print Screen key
    VK_INSERT Insert key
    VK_DELETE Delete key
    VK_HELP Help keyVK_LWIN Left Windows key (Microsoft keyboard)
    VK_RWIN Right Windows key (Microsoft keyboard)
    VK_APPS Applications key (Microsoft keyboard)
    VK_NUMPAD0 0 key (numeric keypad)
    VK_NUMPAD1 1 key (numeric keypad)
    VK_NUMPAD2 2 key (numeric keypad)
    VK_NUMPAD3 3 key (numeric keypad)
    VK_NUMPAD4 4 key (numeric keypad)
    VK_NUMPAD5 5 key (numeric keypad)
    VK_NUMPAD6 6 key (numeric keypad)
    VK_NUMPAD7 7 key (numeric keypad)
    VK_NUMPAD8 8 key (numeric keypad)
    VK_NUMPAD9 9 key (numeric keypad)VK_MULTIPLY Multiply key (numeric keypad)
    VK_ADD Add key (numeric keypad)
    VK_SEPARATOR Separator key (numeric keypad)
    VK_SUBTRACT Subtract key (numeric keypad)
    VK_DECIMAL Decimal key (numeric keypad)
    VK_DIVIDE Divide key (numeric keypad)
    VK_F1 F1 key
    VK_F2 F2 key
    VK_F3 F3 key
    VK_F4 F4 key
    VK_F5 F5 key
    VK_F6 F6 key
    VK_F7 F7 key
    VK_F8 F8 key
    VK_F9 F9 key
    VK_F10 F10 key
    VK_F11 F11 key
    VK_F12 F12 key
    VK_F13 F13 key
    VK_F14 F14 key
    VK_F15 F15 keyVK_F16 F16 key
    VK_F17 F17 key
    VK_F18 F18 key
    VK_F19 F19 key
    VK_F20 F20 key
    VK_F21 F21 key
    VK_F22 F22 key
    VK_F23 F23 key
    VK_F24 F24 key
    VK_NUMLOCK Num Lock key
    VK_SCROLL Scroll Lock key
    VK_LSHIFT Left Shift key (only used with GetAsyncKeyState and GetKeyState)
    VK_RSHIFT Right Shift key  (only used with GetAsyncKeyState and GetKeyState)
    VK_LCONTROL Left Ctrl key  (only used with GetAsyncKeyState and GetKeyState)
    VK_RCONTROL Right Ctrl key  (only used with GetAsyncKeyState and GetKeyState)VK_LMENU Left Alt key  (only used with GetAsyncKeyState and GetKeyState)
    VK_RMENU Right Alt key  (only used with GetAsyncKeyState and GetKeyState)
    VK_PROCESSKEY Process key
    VK_ATTN Attn key
    VK_CRSEL CrSel key
    VK_EXSEL ExSel key
    VK_EREOF Erase EOF key
    VK_PLAY Play key
    VK_ZOOM Zoom key
    VK_NONAME Reserved for future use
    VK_PA1 PA1 key
    VK_OEM_CLEAR Clear key
      

  3.   

    方向键在KeyPress Event里是看不到的,也就是说方向键不会触发KeyPress Event,要响应
    方向键,写在KeyDown 或者 KeyUp里面procedure TForm1.FormKeyDown(sender: TObject; Shift: TShiftState; var Key: WORD)
    begin
      if Key = VK_UP then
        // do something when press UP key;
      if Key = VK_DOWN then
        // do something when press DOWN key;
      if Key = VK_LEFT then
        // do something when press LEFT key;
      if Key = VK_RIGHT then
        // do something when press RIGHT key;  //或者 
      If Key in [vk_up, VK_DOWN, VK_LEFT, VK_DOWN] then
        ExecSelfCode.
    end;