|
|
|
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 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Вообще, несколько раз приходилось копаться в исходниках VCL на тему обработки сообщений....это конечно непотребство какое-то! Так из мухи раздуть слона надо постараться))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:50:53 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57....это конечно непотребство какое-то! А кому шас лехко? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:54:49 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovА если фрейм содержит только один TLabel попадает?Не конечно. TLabel - не оконный компонент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:55:51 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
PolesovА кому шас лехко? :-)Так может попробовать вместо фреймов формы. Но это так - шальная мысль)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 12:57:27 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
И Frame и TForm - оба наследники TScrollingWinControl они оба имеют HWND, поэтому заменять одно другим смысла нет. Про WM_HELP - почитайте MSDN, что когда и кому приходит. Вообще, мне кажется, проблема надуманная, достаточно менять HelpType|HelpContext у фрейма в зависимости от того, с каким разделом справки он должен быть ассоциирован по месту. А велосипеды с сообщениями, перехватом нажатия клавиш - это от лукавого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 13:04:44 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Так может попробовать вместо фреймов формы.Отставить! У вложенной формы keypreview не работает.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 13:05:09 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
schiИ Frame и TForm - оба наследники TScrollingWinControl они оба имеют HWNDДа, только бардак в VCL их немного по-разному разбирает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 13:06:49 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57schiИ Frame и TForm - оба наследники TScrollingWinControl они оба имеют HWNDДа, только бардак в VCL их немного по-разному разбирает. Бардак - он обычно не в VCL :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 13:38:22 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57PolesovА если фрейм содержит только один TLabel попадает?Не конечно. TLabel - не оконный компонент. В том то и заковыка, что возможны фрейм без оконных контролов, а контекстную справку вызывать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 15:48:54 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Barmaley57PolesovА кому шас лехко? :-)Так может попробовать вместо фреймов формы. Но это так - шальная мысль)) Потребуется приличный объем переделок. Пока решено использовать WM_HELP с подменой WindowProc у ParentForm - это вариант вроде работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 15:50:34 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
schiдостаточно менять HelpType|HelpContext у фрейма в зависимости Дело в том, что для вызова контекстной справки используется как HelpContext фрейма, там и некая идентификационная строка ( используется chm). Конечно можно в разделе [MAP] ассоциировать строки с идентификаторами, но это тоже кусок работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 15:54:48 |
|
||
|
TFrame - как обработать сообщение WM_KEYUP?
|
|||
|---|---|---|---|
|
#18+
Polesovschiдостаточно менять HelpType|HelpContext у фрейма в зависимости Дело в том, что для вызова контекстной справки используется как HelpContext фрейма, там и некая идентификационная строка ( используется chm). Конечно можно в разделе [MAP] ассоциировать строки с идентификаторами, но это тоже кусок работы. У TControl есть HelpContext, HelpType, HelpKeyword - туда столько всего можно написать, что хватить на все случаи жизни :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2017, 16:53:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2042244]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
228ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 561ms |

| 0 / 0 |
