Советы по Delphi


Отмена нажатия клавиши


Допустим, у нас имеется задача не допустить появление в окне компонента 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]



Содержание раздела