Вопрос
Я пишу программу, к которой пользователь должен обращаться очень часто. Для этого ей нужно сделать горячую клавишу, например как в виндах вин+a — поиск файлов. Вызываться должна даже тогда, когда ни одно окно не активно (и когда программа, естественно, висит в памяти). Где-то писали, как это сделать, но оно не работало. Можно также кинуть ссылочку на компонент если таковой имеется.
Ответ
Для начала надо зарегистрировать горячую клавишу
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, id, 0, VK_RETURN);
end;
Здесь id — это константа — идентификатор клавиши (не путать с виртуальным кодом). См. его использование далее. Значение — любое от 0 до 49151. Важно, чтобы другие клавиши не имели этот же идентификаторы.
Третий параметр может принимать значения MOD_ALT (клавиша ALT должна удерживаться), MOD_CONTROL, MOD_SHIFT.
Четвертый параметр — виртуальный код клавиши. В данном примере — Enter.
Далее на в форме (public или private) надо описать метод WMHotKey:
public
{ Public declarations }
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
end;
И затем его реализацию:
procedure TForm1.WMHotKey(var Msg : TWMHotKey);
begin
if Msg.HotKey = id then //Обратите внимание на id — это тот самый идентификатор
ShowMessage('Вы нажали на Enter'); //Нужные вам действия
end;
При завершении работы горячую клавишу надо удалять:
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Form1.Handle, id);
end;
Вот и все.
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация