СообЧа > База Знаний > Программирование > Delphi

Вопрос

Я пишу программу, к которой пользователь должен обращаться очень часто. Для этого ей нужно сделать горячую клавишу, например как в виндах вин+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 Сообщество Чайников
Контактная информация