Это в событиях OnKeyPress
procedure TForm1.Button13KeyPress(Sender: TObject; var Key: Char);
begin
if key =#106 then Button13.Click;
Я хочу сделать что бы при нажатие клавиатуры(в данном случае нажатие на кнопку *) выполнялся Button, но что то не получается. В чем может быть ошибка?
Последний раз редактировалось KASTEIL; 15.12.2012 в 17:59.
Создай отдельную функцию сравнивания текущей клавиши, затем в событиях onKeyUp/onkeydown/onkeyclick тех компонентов/форм, у которых текущий фокус у них во входящих параметрах этих процедур ты увидишь принимаемый индекс/номер нажатой горячей клавиши (var Key) и направляй этот индекс в эту отдельную функцию и обрабатывай как душе вздумается.
Смотря какой компонент активен и принимает ввод, там и отлавливай клавиши, обрабатывать можно там же или написать отдельную функцию/процедуру, это от желания зависит. Если компонентов несколько с фокусами то направть обработку этого события на тот компонент, в которой ты выше уже описал, например ты написал обработку клавишь в текстовом поле где вводится число, затем по каким то причинам фокус с поля ввода ушел на кнопку например, в событиях кнопки выстави собития нажатия клавишь на аналогичное у твоего текст.поля, получится одно событие на несколько компонентов/форм.
Обработка должна быть типа:
Цитата:
if not (Key in [#13, #8]) then Abort;
Если это клавиша Enter, Backspace, то блокируем событие и эти клавиши "не печатаются" все остальные допускаются, можно также отдельные символы печатать в диапозонах или через запятую, например ['0'..'9']
Юзай гугл/MSDN справки, если решил стать кодером, то твоя первоочередная задача научиться пользоваться поисковыми системаи, не нужно все знать, нужно знать где это найти
Последний раз редактировалось Tr0y; 15.12.2012 в 20:33.
есть множество способов отлавливать нажатия внутри программы.
Например, поставить процедуру отлова клавиши на постоянно включенный таймер. И клавиши будут отлавливаться, даже если форма свернута.
Цитата:
procedure TForm1.Timer7Timer(Sender: TObject);
begin
if (GetKeyState(VK_CONTROL)=-127)or(GetKeyState(VK_CONTROL)=-128) then begin
end;
end;
В твоем случае, поймав клавишу, будет логично сделать ее button1.enabled:=false; чтобы пользователь видел, что он нажал.
коды виртуальных клавиш можно посмотреть [Ссылки могут видеть только зарегистрированные пользователи. ]
Не надо таймеров, принимать сообщения можно без них.)
Пример функции принимающей сообщения клавиш:
Код:
private
procedure OnHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
...
procedure TForm1.OnHotKey(var Msg: TWMHotKey);
begin
inherited;
if (Msg.HotKey = VK_MULTIPLY) then
showmeaasage('Нажали умножение');
end;
Список взять можно прямо из MDSN: [Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ]
Например, поставить процедуру отлова клавиши на постоянно включенный таймер. И клавиши будут отлавливаться, даже если форма свернута.
В твоем случае, поймав клавишу, будет логично сделать ее button1.enabled:=false; чтобы пользователь видел, что он нажал.
коды виртуальных клавиш можно посмотреть [Ссылки могут видеть только зарегистрированные пользователи. ]