| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > RegisterHotKey |
| Автор: _8989 14.11.2003, 21:01 | ||
| Здравствуйте! Помогите зарегистрировать комбинацию клавишь или одну горячую клавишу. Программа записывает в реестр комбинацию клавишь или одну горячую клавишу (в зависимости от выбора юзера) в виде DWORD-параметра. Позже считывает и заносит в переменную wHotKey (word). Вопрос, как теперь зарегистрировать с помощью функции RegisterHotKey комбинацию клавишь или одну горячую клавишу? Я думал MAKEWORD мне поможет, но не вышло:
Помогите!!! |
| Автор: Gloomy 14.11.2003, 22:28 |
| Я писал небольшую статейку http://ipb.ovl.ru/forum/topic242.html. З.Ы. Это не реклама! Просто не хочу переписывать одно и то же еще раз. |
| Автор: _8989 15.11.2003, 09:00 |
| Статью прочитал. Это всё понятно, но вопрос-то в другом... |
| Автор: <Spawn> 15.11.2003, 09:47 | ||
_8989 Вот тебе примерчик:
Видимо ты не то значение передавал в 3-ий параметр функции - MAKEWORD(0, wHotKey) |
| Автор: _8989 15.11.2003, 11:34 |
| Последний параметр (WordRec(scShiftA).Lo) распознаеться легко, а нужно распознать и первый (MOD_SHIFT). А в твоем примере прямо подставляеться первый параметр. А если пользователь ввёл не SHIFT, а SHIFT+ALT? Мне нужно распознать оба параметра! |
| Автор: <Spawn> 15.11.2003, 13:15 | ||||
Тогда можешь поступить одним из следующих способов:
или
|
| Автор: <Spawn> 15.11.2003, 13:17 | ||||
Если же ты будешь использовать комбинации типа Shift + Ctrl, то маленько переделать этот код нужно будет, например так:
А потом в WM_HOTKEY сравнивать с этим Modifier:
|
| Автор: _8989 15.11.2003, 13:29 |
| Дело в том, что не я буду устанавливать комбинацию клавишь, а пользователь. А что он поставит - не знает и Бог. |
| Автор: <Spawn> 15.11.2003, 13:44 | ||
_8989 ну я же показал тебе как нужна сделать. Вот более полный пример:
Клик на Button1 решистрирут новый Хоткей, клик на Button2 делает обратное действие. HotKey вводится в hkUserKey(компонент THotKey) |
| Автор: Vex 15.11.2003, 14:12 |
| 8989, я писал для себя подобную программку для открывагния папок по горячим клавишам, если хочешь, я тебе дам исходники. У меня там правда сочетания запоминаются в текстовый файл. И код написан коряво. |
| Автор: _8989 17.11.2003, 15:04 | ||
Здесь WordRec(wHotKey).Lo считывается нормально, а Modifiers не распознаёться. Что не так? P.S. Программа пишеться без использования VCL. |
| Автор: <Spawn> 17.11.2003, 15:22 |
| _8989 Попробуй сделать Modifiers: = 0; |
| Автор: _8989 17.11.2003, 16:29 |
| Бесполезно! |
| Автор: <Spawn> 17.11.2003, 16:35 |
| Тогда, скорее всего, в wHotKey используются другие биты для идентификации нажатия Ctrl, Alt и т.д. |
| Автор: _8989 17.11.2003, 20:42 |
| 2Vex Представь свой код здесь, пожалуйста. |
| Автор: Vex 17.11.2003, 21:14 | ||
Я делал стандартно - через атомы. Только я не очень понял в чем тут проблема - зарегить ОДНУ клавишу или записать и прочитать все это с реестра? |
| Автор: <Spawn> 17.11.2003, 22:04 |
| _8989 Ради интереса можно было справку посмотреть |
| Автор: _8989 18.11.2003, 18:08 |
| Это бесполезно! |
| Автор: <Spawn> 19.11.2003, 06:31 |
| _8989 Значит ты что то не то делаешь |
| Автор: _8989 19.11.2003, 15:06 |
| 2<Spawn> Твой пример (Дата 15.11.2003, 13:44) работает, если использовать VCL. А если писать на чистом WIN32API, то не хочет. |
| Автор: <Spawn> 19.11.2003, 16:08 | ||||
_8989 Дак тот пример проверяет наличие совсем других битов в переменной. Посмотри на это:
и на это:
Не правда ли они различаются? |
| Автор: _8989 19.11.2003, 16:57 |
| Подставлял и такие HOTKEYF_SHIFT и т.д. Результата никакого. |
| Автор: <Spawn> 19.11.2003, 22:05 |
| Значит не правильно подставлял |
| Автор: _8989 19.11.2003, 22:08 |
| А как правильно? |
| Автор: <Spawn> 19.11.2003, 22:35 |
| Не знаю, т.к. не видел твоего кода |
| Автор: _8989 22.11.2003, 20:05 |
| Я ж его уже представлял ранее... |
| Автор: _8989 25.11.2003, 10:53 | ||
|