Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.10.2009, 13:31
series777 series777 вне форума
Прохожий
 
Регистрация: 15.10.2009
Сообщения: 4
Репутация: 10
По умолчанию как организовать перехват нажатия сочетания клавиш

как сделать так чтобы при нажатии определенной комбинации клавиш к примеру ctrl+y или при нажатии клавиш f1 f2 f3 программа совершала какое либо действие а именно выводила сообщение или открывала дочернее окно

помогите кто может плиз

за ранее благодарен

Последний раз редактировалось series777, 15.10.2009 в 13:34.
Ответить с цитированием
  #2  
Старый 15.10.2009, 17:17
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Для этого есть компонент ActionManaget
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 16.10.2009, 09:06
series777 series777 вне форума
Прохожий
 
Регистрация: 15.10.2009
Сообщения: 4
Репутация: 10
По умолчанию

а как именно это реализовать если не сложно можно привести пример плиз
Ответить с цитированием
  #4  
Старый 16.10.2009, 10:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Кидаете на форму компонент ActionManager. Вызываете в его свойствах Customize. Добавляете в его список New Action. Для него в свою очередь в инспекторе объектов обрабатываете событие OnExecute а так-же устанавливает в свойстве ShortCut нужное сочетание клавиш.
Все
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 17.10.2009, 00:34
Аватар для Vlad55
Vlad55 Vlad55 вне форума
Прохожий
 
Регистрация: 17.10.2009
Сообщения: 17
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от series777
как сделать так чтобы при нажатии определенной комбинации клавиш к примеру ctrl+y или при нажатии клавиш f1 f2 f3 программа совершала какое либо действие а именно выводила сообщение или открывала дочернее окно

помогите кто может плиз

за ранее благодарен
Можно в принципе и горячие системные клавишы повесить на эти сочетания через

RegisterHotKey()
__________________
Delphi в Internet - блог о программировании. Малоизвестные и редко обсуждаемые темы программирования на Delphi
Ответить с цитированием
  #6  
Старый 18.10.2009, 22:59
Scream Scream вне форума
Прохожий
 
Регистрация: 15.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

а можнопо подробнее насчет RegisterHotKey()
Ответить с цитированием
  #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

Последний раз редактировалось Vlad55, 19.10.2009 в 12:34.
Ответить с цитированием
  #8  
Старый 19.10.2009, 17:14
Scream Scream вне форума
Прохожий
 
Регистрация: 15.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

Vlad55 спасибо тебе за разьяснения
Ответить с цитированием
  #9  
Старый 03.11.2010, 18:05
Mohin Mohin вне форума
Прохожий
 
Регистрация: 03.11.2010
Сообщения: 1
Репутация: 10
По умолчанию

а как можно перехватить нажатие клавиш в цикле?
while true do
begin
if klavisha=vk_F12 then break;
end;
вот примерно так мне нужно
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter