Отмена нажатия клавиши
Допустим, у нас имеется задача не допустить появление в окне компонента Tedit символа "+" или "-":
Tformz.EditzKeyDown(Sender:Tobject;Var key:word;Shift:TshiftState); var save_key:byte; begin save_key := key; KEY := $0; If ((save_key = VK_ADD)or(save_key=VK_SUBTRACT)) then do что-то делаем... else key := save_key; .. .. end; |
Я не уверен в том, что VK_ADD, VK_SUBTRACT как VK_значения могут соответствовать кодам клавиш на дополнительной цифровой клавиатуре, ее значения могут идти и после VK_NUMPAD-значений.
VK-коды клавиш приведены в справке помощи по API-функциям, в разделе Virtual Key Codes. Но не все они поддерживаются в DELPHI.
.. implementation const proof:integer = 0; {Просто для тестирования} var key_sig:integer; {Код клавиши с Numeric KeyPad +/- ?} {Простой способ передачи для KeyDown и KeyPress} {**************** Обработка клавиши*******************} procedure Tformxyz.EditzzzKeyDown(...var key:word...); var save_key:byte; begin key_sig := 0; {Значение по-умолчанию} save_key := key; {сохраняем код клавиши, если она нужна позднее} if (key = VK_ADD) then key_sig := +1; if (key + VY_SUBTRACT) then key_sig := -1; end; procedure Tformxyz.EditzzzKeyPress(...var key:char...); var save_key:char; begin save_key := key; key := #0; {Подавляем печать символа...сейчас} if key_sig = 0 then key := char(save_key) {Печатаем символ} {Выше я уже обращал ваше внимание на то, что данный} {код не является обязательным} else begin proof := proof + key_sig; {Демонстрация того, как это работает} edityyy.text := inttostr(proof); end; end; .. .. end. |
[001994]