Показать сообщение отдельно
  #7  
Старый 19.10.2009, 12:31
Аватар для Vlad55
Vlad55 Vlad55 вне форума
Прохожий
 
Регистрация: 17.10.2009
Сообщения: 17
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Scream
а можнопо подробнее насчет RegisterHotKey()
Можно. RegisterHotKey() регистрирует горячие системные клавиши. Для того, чтобы это сделать, необходимо указать виртуальные коды клавиш и идентификатор. Например, чтобы зарегистрировать сочетание ctrl+y можно использовать такой код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
id1 := GlobalAddAtom('Hotkey1');
RegisterHotKey(Handle, id1, VK_CONTROL, MapVirtualKey(VkKeyScan('y'),0));
....
end;
Если все пройдет успешно то функция вернет true. Соответственно, чтобы перехватывать нажати клавиш и что-то выполнять в программе, необходимо отлавливать сообщение WM_HOTKEY. Делается это так (для того же сочетания ctrl+y):
Код:
private 
    id1: Integer; 
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; 
{.....}
implementation 

{$R *.DFM} 

procedure TForm1.WMHotKey(var Msg: TWMHotKey); 
begin 
  if Msg.HotKey = id1 then 
    begin
      {что-то делаем в программе}
    end
end;

Подобным образом можно отлавливать всё, что угодно, любое сочетание клавиш. На всякий случай поясню некоторые функции:

VkKeyScan('y') - определяет скан-код клавиши
MapVirtualKey(VkKeyScan('y'),0) - переводит скан-код в виртульный код
Константы типа VK_... описаны в модуле Windows.
Вроде бы все. Если что-то непонятно - не стесняйтесь, спрашивайте. Попробую ответить более развернуто

Чуть не забыл. При выключении программы необходимо снимать свои горячие системные клавиши функцией (для нашего примера):
Код:
UnregisterHotKey(Handle, id1)
__________________
Delphi в Internet - блог о программировании. Малоизвестные и редко обсуждаемые темы программирования на Delphi
Ответить с цитированием