OnKeyDown:
Key是键值,还有一个Shift是功能键的状态。

解决方案 »

  1.   

    相应OnKeydown事件,
    if key=VK_F10 then
    begin
    ...//按下了F10功能键
    end;
    ...
      

  2.   

    另外一个参数shift是这样定义的:shift:TShiftState;

    type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
    其中
    ssShift The Shift key is held down.
    ssAlt The Alt key is held down.
    ssCtrl The Ctrl key is held down.
    ssLeft The left mouse button is held down.
    ssRight The right mouse button is held down.
    ssMiddle The middle mouse button is held down.
    ssDouble The mouse was double-clicked.
    判断shift就可以知道是按了那些辅助键或者鼠标键了。
    shift和key两者结合起来就可以完成你所要求的功能了。
      

  3.   

    各位上面我都知,
    但如果你在SHORTCUT中加上一句
    memo1.Lines .add(inttostr(msg.charcode)
    把键值打出来,你会发现好象不只一个值,而且小键盘(即键盘最右边的组键)当是输入数字时会
    和功能键的值相重复,我现在就想怎么才能区分功能键和小键盘(即键盘最右边的组键)
    当是输入数字时的键值,即我不想让按功能键时时激活我的程序;
      

  4.   

    BOOL GetKeyboardState(    PBYTE lpKeyState  // address of array to receive status data
       );
     
      

  5.   

    请看帮助:Virtual KeyVK_***可以区分是什么键。
      

  6.   

    如果在Form中判断需要将Form的KeyPreview属性设为True;
      

  7.   

    另外在Delphi中源程序Windows.pas中有如下定义
      { Virtual Keys, Standard Set }
      VK_LBUTTON = 1;
      VK_RBUTTON = 2;
      VK_CANCEL = 3;
      VK_MBUTTON = 4;  { NOT contiguous with L & RBUTTON }
      VK_BACK = 8;
      VK_TAB = 9;
      VK_CLEAR = 12;
      VK_RETURN = 13;
      VK_SHIFT = $10;
      VK_CONTROL = 17;
      VK_MENU = 18;
      VK_PAUSE = 19;
      VK_CAPITAL = 20;
      VK_KANA = 21;
      VK_HANGUL = 21;
      VK_JUNJA = 23;
      VK_FINAL = 24;
      VK_HANJA = 25;
      VK_KANJI = 25;
      VK_CONVERT = 28;
      VK_NONCONVERT = 29;
      VK_ACCEPT = 30;
      VK_MODECHANGE = 31;
      VK_ESCAPE = 27;
      VK_SPACE = $20;
      VK_PRIOR = 33;
      VK_NEXT = 34;
      VK_END = 35;
      VK_HOME = 36;
      VK_LEFT = 37;
      VK_UP = 38;
      VK_RIGHT = 39;
      VK_DOWN = 40;
      VK_SELECT = 41;
      VK_PRINT = 42;
      VK_EXECUTE = 43;
      VK_SNAPSHOT = 44;
      VK_INSERT = 45;
      VK_DELETE = 46;
      VK_HELP = 47;
    { VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) }
    { VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }
      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_SEPARATOR = 108;
      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_F17 = 128;
      VK_F18 = 129;
      VK_F19 = 130;
      VK_F20 = 131;
      VK_F21 = 132;
      VK_F22 = 133;
      VK_F23 = 134;
      VK_F24 = 135;
      VK_NUMLOCK = 144;
      VK_SCROLL = 145;
    { VK_L & VK_R - left and right Alt, Ctrl and Shift virtual keys.
      Used only as parameters to GetAsyncKeyState() and GetKeyState().
      No other API or message will distinguish left and right keys in this way. }
      VK_LSHIFT = 160;
      VK_RSHIFT = 161;
      VK_LCONTROL = 162;
      VK_RCONTROL = 163;
      VK_LMENU = 164;
      VK_RMENU = 165;
      VK_PROCESSKEY = 229;
      VK_ATTN = 246;
      VK_CRSEL = 247;
      VK_EXSEL = 248;
      VK_EREOF = 249;
      VK_PLAY = 250;
      VK_ZOOM = 251;
      VK_NONAME = 252;
      VK_PA1 = 253;
      VK_OEM_CLEAR = 254;你可以在OnKeyDown,OnKeyUp中加入判断.
      

  8.   

    如果有其它问题,请联系[email protected]
      

  9.   

    Win中是基于消息(Message)控制的,在Delphi中,将Win的消息封装成了事件(even),你要判断一个键是否按下,可在指定的窗口中重载onKeyDown事件的代码,每个键的代码楼上的兄弟已经讲过了,不过的相应的窗口的响应键盘事件的属性一定要设为True(Delphi的窗口缺省不响应键盘事件的),如果你同时要判断相应的键已经放开,可以相应的重载onKeyUp事件的代码。
       当然,你一样可以拦截Win的与键盘相应的消息来实现。