| Bokul |
24.07.2007 21:24
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Возникли проблемы. Ситуация такова: при создании главного окна я связываю с ним комбинацию горячих клавиш (RegisterHotKey), с которой ассоциирую идентификатор HotKeyTId. Но позже, я предоставляю юзеру возможность, в случае необходимости, изменить комбинацию, использую Hot Key контрол, создаваемого на отдельном PopUp окне. Когда ввод Hot Keys закончен, пользователю необходимо подтвердить его нажатием на кнопку (еще один контрол окна PopUp), после чего оконная функция PopUp'a считывает ввод Hot Key контрола, посылая ему сообщение HKM_GETHOTKEY. В ответ я получаю слово (Word), в котором хранятся флаги специальных клавиш (HiWord(word)), а также код виртуальной клавиши (LoWord(Word)), введенных юзером. Это слово я посылаю главному окну, которое, в свою очередь, снимает предыдущею комбинацию горячих клавиш с HotKeyTId (UnregisterHotKey ) и ставит новую, считанную с контрола. Проблема в том, что HiWord(word)) всегда возвращает 0... Из-за чего у меня возникает сомнение что HKM_GETHOTKEY сообщения корректно, в моем случае, и что вместо строки с Hot Key контрола оно возвращает комбинацию горячих клавиш, при которых этот контрол будет активен. Так ли это?
Сообщение отредактировано: Bokul - 24.07.2007 21:44 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
| volvo |
26.07.2007 19:03
Сообщение
#2
|
|
Гость |
Практически? Не уверен, что делать вот так:
var modif: byte;будет правильно... А знаешь, почему? Потому, что оно конечно понятно, что под результат отводится размер переменной, равный максимальному из размеров переменных, участвующих в выражении. Только вот какая штука получается: если сначала вычислится вторая часть выражения, т.е., (buf and $00FF), и только потом будет выполняться первая - то все в порядке, тогда первая часть будет уже выполняться в поле из 16 бит, а нам больше и не надо... Но если сначала выполнится (modif shl 8), то оно еще будет выполняться в байтовой сетке, ведь размер modif и размер 8 - один байт, как результат: выражение (modif shl 8) = 0... А какая из частей выражения будет вычисляться первой - не знает никто: Цитата(ref.pdf @ Chapter 8) Remark: The order in which expressions of the same precedence are evaluated is not guaranteed to be left-to-right. In general, no assumptions on which expression is evaluated first should be made in such a case. The compiler will decide which expression to evaluate first based on optimization rules. Thus, in the following expression: a := g(3) + f(2); f(2) may be executed before g(3). Если же сделать приведение к Word-у, то при любом раскладе результат будет корректным... Дело твое, выбирай - или сократить программу на 6 символов и получить возможность возникновения бага, или не делать этого... |
Bokul Контрол Hot Key 24.07.2007 21:24
Bokul В случае необходимости могу предоставит код... 24.07.2007 21:49
Bokul Если не брать во внимание PopUp окно, а заменить ... 25.07.2007 1:03
volvo А что ты ожидал, что к тебе вернется, при таком оп... 25.07.2007 1:04
Bokul Я выразился не правильно, на самом деле я читаю вс... 25.07.2007 1:07
volvo Кстати, проблема у тебя может быть еще в том, что ... 25.07.2007 1:08
Bokul Спасибо, действительно ошибка, но после исправлени... 25.07.2007 1:11
volvo Так... Моя ошибка - надо все-таки работать при Buf... 25.07.2007 1:34
Bokul
Премного благодарен! :good: 25.07.2007 1:40
Bokul Потестил... рабочии комбинации только Сtrl'a +... 25.07.2007 2:25
volvo Проблема в следующем: описаны константы вот так
... 25.07.2007 8:26
volvo Так, ну все понятно... Какой-то умник решил, что в... 25.07.2007 8:50
Bokul В принципе я разобрался, но из-за неопытности с ра... 25.07.2007 18:43
volvo :yes2:
Посмотрел здесь: HKM_GETHOTKEY Message, ... 25.07.2007 18:55
Bokul Бессмысленный смысл путаницы стал ясен: этим разра... 26.07.2007 5:17
volvo А зачем? Для экономии места, что-ли? :)
Теоретиче... 26.07.2007 8:16
Bokul
Ради этого и спросил.. :)
А будит ли так? Теоре... 26.07.2007 18:10![]() ![]() |
|
Текстовая версия | 9.12.2025 0:51 |