У меня есть странное небольшое приложение, которое открывается на экранной цифровой клавиатуре/калькуляторе, записанной в Delphi. Я хотел бы сделать его поэтому, если бы Вы нажали 'Enter' (на цифровой клавиатуре), то Вы нажали бы '=' и если бы Вы нажали 'возврат' (на основной клавиатуре), то Вы нажатие бы 'OK'.
Существует кнопка OK, кто парень формы по умолчанию, который отвечает на удар, входят или возвращаются. Существует также обработчик событий onKeyDown, который потенциально мог бы получить и Войти и возвратиться как vk_return. Но его обязанности захвачены кнопкой 'OK' по умолчанию.
Если я мог бы знать различие между возвратом и войти, то я мог избавиться от своего свойства по умолчанию на кнопке OK и просто совершаю нападки, обработчик события Click кнопки OK на ключе формы вниз функционируют, но увы они - оба VK_RETURN.
Переопределить обработчик сообщений 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;