Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.0.240] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|||
|
Здравствуйте! Помогите зарегистрировать комбинацию клавишь или одну горячую клавишу. Программа записывает в реестр комбинацию клавишь или одну горячую клавишу (в зависимости от выбора юзера) в виде DWORD-параметра. Позже считывает и заносит в переменную wHotKey. Вопрос, как теперь зарегистрировать с помощью функции RegisterHotKey комбинацию клавишь или одну горячую клавишу? Я думал MAKEWORD мне поможет, но не вышло:
Помогите!!! |
Сообщ.
#2
,
|
|
|
Ты хочешь обратиться к младшему или станшему слову? Тогда LongRec
|
Сообщ.
#3
,
|
|
|
И к тому и к другом!
|
Сообщ.
#4
,
|
|||||
|
Дело в том, что wHotKey занимает два байта, то есть WORD. Я так понял, что тебе надо записать в реестре все в одном ключе DWORD (4 байта). Функция MAKEWORD делает "склеивает" два байта, а тебе надо юзать функцию, которая "склеивает" два слова. |
Сообщ.
#5
,
|
|
|
можна и так:
RegisterHotkey(Handle,1,MOD_CONTROL or MOD_SHIFT,ord('A')); т.е. ловим Ctrl+Shift+A |
Сообщ.
#6
,
|
|
|
Используй MapVirtualKey()
|
Сообщ.
#7
,
|
|||
|
Показываю CODE:
А результата-та и нет! Помогите МАСТЕРА!!! |
Сообщ.
#8
,
|
|
|
ShortCutToText - это не то - вот смотри:
function ShortCutToText(ShortCut: TShortCut): string; Description Call ShortCutToText to obtain a text description of the shortcut associated with a menu item. Use this function when the application needs to display a description of a shortcut to the user. |
Сообщ.
#9
,
|
|
|
Да дело совсем не в ShortCutToText. Это я для себя сделал, чтобы видеть, есть ли что-нибудь в переменной Modifiers. А эта переменная пустая. Хот-Кей не регистрируется.
|
Сообщ.
#10
,
|
|
|
Думаю дело как раз в этом - просто ShortCutToText не покажет тебе есть ли что-то в Modifiers или нет, да и при чем тут вообще Modifiers???
Смотри справку по RegisterHotKey: Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. |
Сообщ.
#11
,
|
|||
|
Ну, мне ж нужно знать, какое сочетание клавиш (CTRL и т.д.) установил пользователь. |
Сообщ.
#12
,
|
|||||
|
2 _8989
Проверь значение которое возвращает RegisterHotKey, если это FALSE, то либо данное сочетание уже используется, либо задано неверно, что скорее всего. ИМХО добавь обнуление переменной Modifiers перед тем как забивать туда значения флагов. Проверь совпадает ли значение WordRec(wHotKey).Lo с тем которое должно быть.... если нет то копайся с SendMessage - оно тебе что-то не то возвращает. ЗЫ
Это нормально, т.к. если в ShortCutToText передать параметр в котором нет самой горячей клавиши, только флаги ALT, CTRL и SHIFT, то функция вернет пустую строку (смотри исходник). |
Сообщ.
#13
,
|
|||
|
Всё нормально! RegisterHotKey возвращает TRUE. C WordRec(wHotKey).Lo всё нормально, буква распознаеться, не распознаеться Modifiers. Помогите!!!
|
Сообщ.
#14
,
|
|
|
_8989 - читай внимательно справку
The HKM_GETHOTKEY message retrieves the virtual-key code and modifier flags of a hot key from a hot-key control. HKM_GETHOTKEY wParam = 0; lParam = 0; Return Values Returns the virtual-key code and modifier flags. The virtual-key code is in the low-order byte, and the modifier flags are in the high-order byte. The modifier flags can be a combination of the following values: Value Meaning HOTKEYF_ALT ALT key HOTKEYF_CONTROL CTRL key HOTKEYF_EXT Extended key HOTKEYF_SHIFT SHIFT key так шо надо Low и High пользовать... |
Сообщ.
#15
,
|
|||
|
Спасибо!
Это работет, но распознаёться только HOTKEYF_CONTROL, т.к. он последний. Как исправить ситуацию? |