Тема: DELPHI
Показать сообщение отдельно
Старый 20.03.2007, 01:45   #1 (permalink)
V_Bond
Member
 
Регистрация: 26.11.2006
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 23
По умолчанию DELPHI

Горячие клавиши
Горячие клавиши - сочетания клавиш, которые регистрируются в системе и при их нажатии система посылает сообщение WM_HOTKEY тому окну, Handle которого было заявлено при регистрации горячей клавиши. При этом не важно, имеет ли окно- получатель фокус ввода и видимо ли оно на экране. Это особенно удобно при написании резидентных программ, т.е. приложений, которые активизируются при нажатии определенных сочетаний клавиш.
Регистрация производится при помощи вызова API RegisterHotKey
function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL;
hWnd - Handle окна, которое будет получать сообщения при нажатии горячей клавиши
id - идентификатор (просто число, передаваемое в сообщении WM_HOTKEY. id позволяет приложению работать с несколькими горячими клавишами, различая их по id). Нельзя определить две горячие клавиши с одинаковым id
fsModifiers - модификаторы. Определяют, какие клавиши должны быть нажаты совместно с указанной vk. Допустимы значения: MOD_ALT - ALT, MOD_CONTROL - CTRL, MOD_SHIFT - SHIFT
vk - виртуальный код клавиши
Если горячую клавишу удается зарегистрировать, то функция возвращает TRUE.
При завершении приложения необходимо отменить регистрацию горячей клавиши при помощи вызова UnregisterHotKey. При вызве ей передается Handle окна и id горячей клавиши.

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
// Обработчик сообщения WM_HOTKEY
procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMHotKey(var Mess: TWMHotKey);
begin
MessageBeep(0);
ShowMessage('Нажата горячая клавиша CTRL+F12');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1 ,MOD_CONTROL, vk_F12);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, 1);
end;
V_Bond вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070