Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Сегодня :

День славянской письменности и культуры


как создать "hotKey"


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
juriy
Гость







СообщениеСр, 10-Дек-2003 11:12    Заголовок сообщения: как создать "hotKey"
Цитата

Подскажите пож,
как создать "hotKey" на три кнопки(например Ctrl+Chift+P).
я это сделал через getkeystate(извините за синтаксис, если что не так)
функция вызывается через "OnTimer".
Есть ли возможность это все через Message произвести, а то работает как-то заторможенно, да и выглядит некрасиво.
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеСр, 10-Дек-2003 11:18 
Цитата

один из способов
создаешь action, указываешь там нужную тебе комбинацию, и потом этот акшин назначаешь буттоне или менюшке...

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
juriy
Гость







СообщениеСр, 10-Дек-2003 16:19 
Цитата

Уважаемый Гелиос!
Если возможно-чуть подробнее Вопрос
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеЧт, 11-Дек-2003 7:00 
Цитата

1. Кидаешь на форму TActionList
2. Дважды на нем кликаешь
3. Создаешь новый action
4. Заполняешь свойства Caption, Hint
5. В свойстве ShortCut выбираешь когрячую клавишу
6. Можешь указать дополнительняе горячие клавиши в SecondaryShortCuts
7. Пишешь обработчик OnExecute
8. кидаешь на форму буттон указываешь в свойстве Action созданный акшин
9. или создаешь меню, где в одном из пуктов тоже указываешь в свойстве Action этот акшин
10. либо делаешь 8 и 9.

вот собственно и все )))

Можно еще заюзать TActionManager, он позволяет в рунтайме настраивать ActionMainMenuBar и ActionToolBar.
Но для начала разберись c TActionList

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеЧт, 11-Дек-2003 7:00 
Цитата

1. Кидаешь на форму TActionList
2. Дважды на нем кликаешь
3. Создаешь новый action
4. Заполняешь свойства Caption, Hint
5. В свойстве ShortCut выбираешь когрячую клавишу
6. Можешь указать дополнительняе горячие клавиши в SecondaryShortCuts
7. Пишешь обработчик OnExecute
8. кидаешь на форму буттон указываешь в свойстве Action созданный акшин
9. или создаешь меню, где в одном из пуктов тоже указываешь в свойстве Action этот акшин
10. либо делаешь 8 и 9.

вот собственно и все )))

Можно еще заюзать TActionManager, он позволяет в рунтайме настраивать ActionMainMenuBar и ActionToolBar.
Но для начала разберись c TActionList

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
juriy
Гость







СообщениеПн, 15-Дек-2003 12:18 
Цитата

Спасибо за совет-все работает хорошо.
Однако событие обрабатывается только в случае, если форма активна,
еслижефокус ввода находится в другом прилочении, то "горячие" клавиши уже не обрабатываются, а меня интересует обработка НОТ КЕУ именно в этом режиме.
всего доброго.
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВт, 16-Дек-2003 0:34 
Цитата

Хм. Это, дорогой человек, уже называется хук, а не хоткей. См. функцию SetWindowsHookEx
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
juriy
Гость







СообщениеСр, 17-Дек-2003 15:05 
Цитата

Большое Спасибо : Dr.Pass
- Пойду копать
В начало
Андрей
Гость







СообщениеЧт, 29-Янв-2004 13:09 
Цитата

А я бы использовал RegisterHotKey. Гораздо проще и удобнее. Не надо никаких хуков на систему и ActionList. Тем более, что после этой функции клавиши считываются даже если прога неактивна.
P.S. Не забудь удалить HotKey при уничтожении программы
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеЧт, 29-Янв-2004 23:44 
Цитата

Я юзаю SetWindowsHookEx потому, что бывают ситуации, когда на компе может оказаться еще какая-нибудь программа-любительница RegisterHotKey. А в этом случае "горячими клавишами", возможно, придется делиться...
Ну а по сложности реализации - в принципе, одинаково

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Андрей
Гость







СообщениеСр, 18-Фев-2004 15:34 
Цитата

Я поковырялся с этим делом и нашел интересную инфу. При установке хука надо отловить сообщение

WM_KEYDOWN
Уведомляет окно с фокусом, что была нажата несистемная клавиша.
Паpаметpы:
wParam: Является кодом виpтуальной клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi:
Биты 0-7 в lParamHi являются scan-кодом клавиши, зависящим от OEM.
Бит 8 pавен 1, если клавиша относится к pасшиpенным.
Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша уже была нажата до посылки этого сообщения, бит 14 pавен 1.
Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.

Возвpащаемое значение: Не используется.

Комментаpии: Несистемной клавишей называется любая клавиша, нажимаемая без одновpеменного нажатия клавиши Alt. Для этого сообщения биты 13 и 15 в lParamHi будут нулевыми. Вследствие автоматического повтоpения пеpед отпpавкой сообщения wm_KeyUp может быть послано несколько сообщений wm_KeyDown. Если никакого окна нет в фокусе, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar,
wm_SysChar и wm_SysDeadChar.

Теперь у меня только один вопрос: а как эти самые биты прочитать???
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСр, 18-Фев-2004 21:43 
Цитата

??? Логическими операциями, естессно
Например, if hiword(lparam) and $3000 > 0 then бит 13 равен 1
Обрати внимание на отсутствие привычных скобок при использовании and

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Андрей
Гость







СообщениеПн, 01-Мар-2004 15:17 
Цитата

А зачем мучаться и читать биты
Проще сделать так

WM_KEYDOWN:
begin
if (DWord(GetAsyncKeyState(VK_CONTROL)) and $8000) <> 0 then ...
{
тогда нажат Ctrl
можно применять и для других клавиш
}

end;
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100