|
|
|
OnKeyDown
|
|||
|---|---|---|---|
|
#18+
Если у формы есть процедура, реагирующая на сообщение WM_KEYDOWN, то событие OnKeyDown не выполняется. Почему? Нужно добавить ключевое слово "inherited" в обработчик WM_KEYDOWN, но почему? Я не наследую форму от формы с переопределением OnKeyDown. Если есть Action с сочетанием клавиш, то на это сочетание клавиш не сработает ни WM_KEYDOWN, ни OnKeyDown. Если на форме есть компонент, получающий фокус, то до формы сообщения WM_KEYDOWN не доходят, и убрать фокус нельзя. Как сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2021, 21:03 |
|
||
|
OnKeyDown
|
|||
|---|---|---|---|
|
#18+
registered Если у формы есть процедура, реагирующая на сообщение WM_KEYDOWN, то событие OnKeyDown не выполняется. Почему? Зависит от того, что делается при обработке WM_KEYDOWN. И inherited в этом обработчике нужен для того, что бы срабатывал OnKeyDown. В данном случае inherited к наследованию форм отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2021, 22:11 |
|
||
|
OnKeyDown
|
|||
|---|---|---|---|
|
#18+
registered Если у формы есть процедура, реагирующая на сообщение WM_KEYDOWN, то событие OnKeyDown не выполняется. Почему? Сделайте обработчик wm_keydown, состоящий из слова inherited, поставьте на него брейкпоинт, убедитесь в установленной опции use debug dcu, пройдите код отладчиком и разберитесь. registered Нужно добавить ключевое слово "inherited" в обработчик WM_KEYDOWN, но почему? Директива message - частный случай директивы dynamic. registered Если есть Action с сочетанием клавиш, то на это сочетание клавиш не сработает ни WM_KEYDOWN, ни OnKeyDown. И это разумно. registered Если на форме есть компонент, получающий фокус, то до формы сообщения WM_KEYDOWN не доходят Можно установить свойство KeyPreview. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2021, 00:31 |
|
||
|
OnKeyDown
|
|||
|---|---|---|---|
|
#18+
registered Если у формы есть процедура, реагирующая на сообщение WM_KEYDOWN, то событие OnKeyDown не выполняется. Почему? Нужно добавить ключевое слово "inherited" в обработчик WM_KEYDOWN, но почему? Я не наследую форму от формы с переопределением OnKeyDown. Когда кто-то нажал на клавишу, система (Windows) посылает приложению сообщение WM_KEYDOWN. Цикл обработки сообщений приложения выбирает это сообщение из очереди сообщений, когда до него дойдет очередь и отправляет соответствующему окну, в данном случае - форме. В процедурах обрабатывающих это соообщение вызывается обработчик события OnKeyDown. Можете посмотреть код класса TWinControl. Ваша форма - наследник класса TForm, он в свою очередь унаследован от TWinControl. (TWinControl->TScrollingWinControl->TCustomForm->TForm). Если вы создали обработчик сообщения WM_KEYDOWN и не добавили там inherited, то выполнится ваш обработчик и на этом обработка сообщения закончится. Если вы добавите inherited, то после вашего кода будет вызвана процедура в иерархии предков, которая обрабатывает это сообщение. Код: pascal 1. 2. 3. 4. 5. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Код: pascal 1. 2. 3. 4. Как видно, вызовется обработчик OnKeyDown формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2021, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40055493&tid=2037491]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 490ms |

| 0 / 0 |
