|
|
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Привет всем. Каким образом можно в наследниках от TFrame обрабатывать сообщения нажатия клавиш? В этот метод управление не передается: Код: pascal 1. 2. 3. 4. Суть хотелки: есть набор типовых фреймов, которые располагаются на формах. Экземпляры фреймов (даже одного типа) могут быть ассоциированы с различными разделами справки. Хочется добиться реакции на нажатие клавиши F1 для вызова контекстной справки. С уважением, Polesov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 16:42:06 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovВ этот метод управление не передается:Передается, если специально послать. А так ведь у самого фрейма нет фокуса и надо тогда делать что-то вроде KeyPreview, как у форм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:06:24 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Перекрыть WindowProc у детей фрейма, способных принимать обрабатывать WM_KEYUP и оттуда пересылать сообщение родителю через dispatch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:08:51 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Перекрыть WindowProc у детей фрейма, способных принимать обрабатывать WM_KEYUP У меня не получилось. Код: 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. На Nop поставлен брикпоинт - не попадает. Пробовал с вызовом OldProc в начале и в конце. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:28:26 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Перекрыть WindowProc у детей фрейма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:34:48 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Barmaley57Перекрыть WindowProc у детей фрейма Имеется ввиду, у всех компонентов, расположенных на фрейме? Детей может быть много. Тогда уж проще при создании фрейма у родительской формы переопределить обработчик события OnKeyUp с анализом, что обработчик уже переопределен другим фреймом. Но хотелось бы по ленивому сценарию :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:42:01 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovДетей может быть много.Рекурсивный пробег по Controls[] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:48:05 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Polesov_Vasilisk_пропущено... Имеется ввиду, у всех компонентов, расположенных на фрейме? Детей может быть много. Тогда уж проще при создании фрейма у родительской формы переопределить обработчик события OnKeyUp с анализом, что обработчик уже переопределен другим фреймом. Но хотелось бы по ленивому сценарию :-) По ленивому сценарию - у формы есть обработчик сообщения WM_HELP, в котором определяется, какой Control или его родитель попросил помощи. Этот обработчик можно перекрыть. Методы собственно вызова разных справок у TApplication имеют видимость public ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:51:11 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Рекурсивный пробег по Controls[]Только делать это нужно в переопределенном TmyFrame.Notification. И не забыть восстановить при удалении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 17:53:20 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
schiПо ленивому сценарию - у формы есть обработчик сообщения WM_HELP Можно и так, но не хотелось бы в эту кухню вызова справки каким-либо образом привлекать TForm. В силу того, что все фреймы наследуются от одного базового класса, достаточно вызов справки реализовать в базовом фрейме. А так как наследование форм в данном конкретном проекте не используется, придется для каждого класса форм не забыть про реализацию вызова справки через обработчик сообщения WM_HELP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 18:13:20 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Рекурсивный пробег по Controls ... Только делать это нужно в переопределенном TmyFrame.Notification Надо будет обдумать. Спасибо за совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 18:15:29 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovschiПо ленивому сценарию - у формы есть обработчик сообщения WM_HELP Можно и так, но не хотелось бы в эту кухню вызова справки каким-либо образом привлекать TForm. В силу того, что все фреймы наследуются от одного базового класса, достаточно вызов справки реализовать в базовом фрейме. А так как наследование форм в данном конкретном проекте не используется, придется для каждого класса форм не забыть про реализацию вызова справки через обработчик сообщения WM_HELP. Во фрейме написать подмену WindowProc формы на собственный обработчик WM_HELP - это разве сложно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 18:19:29 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
schiВо фрейме написать подмену WindowProc формы на собственный обработчик WM_HELP - это разве сложно ? Ну, в принципе, это то же самое, что переопределение у родительской формы обработчика события OnKeyUp. Только обработчик на событие WM_HELP будет даже логически проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 18:26:27 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovschiВо фрейме написать подмену WindowProc формы на собственный обработчик WM_HELP - это разве сложно ? Ну, в принципе, это то же самое, что переопределение у родительской формы обработчика события OnKeyUp. Только обработчик на событие WM_HELP будет даже логически проще. Возможно, сообщение WM_HELP придет даже фрейму, как родителю контрола, на котором нажали F1, и у формы ничего не надо будет переопределять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 18:48:22 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovКаким образом можно в наследниках от TFrame обрабатывать сообщения нажатия клавиш? Открыть для себя сообщения с префиксом CN_ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 19:57:29 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
schiВозможно, сообщение WM_HELP придет даже фрейму, как родителю контрола Нет, WM_HELP до фрейма не доходит. Вот примерная реализация в общих чертах: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:34:06 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovWM_HELP до фрейма не доходит.Проверил. Доходит. D2009. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:37:56 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисОткрыть для себя сообщения с префиксом CN_Один фиг, что WM, что СN. У самого фрейма нет фокуса. Не получит он их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:40:06 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисPolesovКаким образом можно в наследниках от TFrame обрабатывать сообщения нажатия клавиш? Открыть для себя сообщения с префиксом CN_ Без явного присвоения фрейму фокуса не работает: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Если явно присваивать фокус фрейму, придется как-то сохранять информацию об ActiveControl родительской формы, а он может быть любого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:42:00 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57PolesovWM_HELP до фрейма не доходит.Проверил. Доходит. D2009. Э-э-э... Если доходит через переопределенную WindowProc, то да. А если написать у фрейма обработчик Код: pascal 1. то в него не попадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:45:48 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Polesovто в него не попадает.Именно так и написал. Попадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:46:48 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Polesovто в него не попадает.Именно так и написал. Попадает.Конечно же, если есть какой-то компонент на фрейме в фокусе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:48:22 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Один фиг, что WM, что СN. У самого фрейма нет фокуса. Не получит он их. Кстати, если на фрейме зажать левую кнопку мыши и нажать какую-либо клавишу, то CN_KeyDown, CN_KeyUp во фрейм приходят, а WM_ нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:49:01 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Barmaley57пропущено... Именно так и написал. Попадает.Конечно же, если есть какой-то компонент на фрейме в фокусе. А если фрейм содержит только один TLabel попадает? Позже попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:50:31 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39459909&tid=2042244]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
219ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 512ms |

| 0 / 0 |
