Delphi: я могу дифференцироваться между клавишей Enter цифровой клавиатуры и возвратом каретки?

У меня есть странное небольшое приложение, которое открывается на экранной цифровой клавиатуре/калькуляторе, записанной в Delphi. Я хотел бы сделать его поэтому, если бы Вы нажали 'Enter' (на цифровой клавиатуре), то Вы нажали бы '=' и если бы Вы нажали 'возврат' (на основной клавиатуре), то Вы нажатие бы 'OK'.

Существует кнопка OK, кто парень формы по умолчанию, который отвечает на удар, входят или возвращаются. Существует также обработчик событий onKeyDown, который потенциально мог бы получить и Войти и возвратиться как vk_return. Но его обязанности захвачены кнопкой 'OK' по умолчанию.

Если я мог бы знать различие между возвратом и войти, то я мог избавиться от своего свойства по умолчанию на кнопке OK и просто совершаю нападки, обработчик события Click кнопки OK на ключе формы вниз функционируют, но увы они - оба VK_RETURN.

10
задан Peter Turner 22 December 2009 в 21:09
поделиться

1 ответ

Переопределить обработчик сообщений 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;
18
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: