代码之家  ›  专栏  ›  技术社区  ›  Peter Turner

德尔菲:我能区分numpad的回车键和回车键吗?

  •  10
  • Peter Turner  · 技术社区  · 16 年前

    我有一个古怪的小应用程序,在屏幕上弹出一个用Delphi编写的数字广告/计算器。我想这样做,如果你按“回车”(在数字键盘上),你会按“=”,如果你按“回车”(在主键盘上),你会按“OK”。

    如果我能知道return和enter之间的区别,那么我就可以去掉OK按钮上的默认属性,只需在formkey-down函数中点击OK按钮的click事件处理程序,但遗憾的是它们都是VK_return。

    1 回复  |  直到 16 年前
        1
  •  19
  •   Barry Kelly    16 年前

    覆盖WM_KEYDOWN消息处理程序:

      procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
    

    procedure TForm1.WMKeyDown(var Message: TWMKeyDown);
    const
      // Message.KeyData format:
      // [0..15 repCount][16..23 scan code][24 extended bit][25..28 reserved]
      // [29 context][30 previous state][31 transition state]
      KD_IS_EXTENDED = 1 shl 24;
    begin
      if Message.CharCode <> VK_RETURN then
      begin
        inherited;
        Exit;
      end;
      if (KD_IS_EXTENDED and Message.KeyData) <> 0 then
        ShowMessage('Keypad Enter')
      else
        ShowMessage('Return');
    end;