| Автор
| Сообщение |
 Evgeny
Постоянный участник

Возраст: 51
Знак зодиака: 
Зарегистрирован: 26.06.2005
Сообщения: 152
Откуда: Омск
|
|
|
Цитата |
|
| Почему в компоненте в его оконной процедуре не обрабатываются курсорные клавиши? Они почему-то даже не ловятся. VK_PRIOR, VK_NEXT и так далее пожалуйста, а вот VK_LEFT и подобные не хотят. |
|
| В начало |
|
 |
|
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
храни/обрабатывай так:
| Код: |
var
Keys:array[0..255] of Boolean;
...wndproc...
WM_KEYDOWN:
Keys[wParam]=TRUE;
.....
|
_________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
 Evgeny
Постоянный участник

Возраст: 51
Знак зодиака: 
Зарегистрирован: 26.06.2005
Сообщения: 152
Откуда: Омск
|
|
|
Цитата |
|
Все просто, написан компонент на API. В его оконной процедуре обрабатывается сообщение WM_KEYDOWN. Если такой компонент используется в главном окне программы, то тут без проблем все работает, но если из главного окна вызвать какой-либо свой диалог с этим же компонентом, вот тут и начинаются чудеса. Как удалось выяснить, в дочерних диалогах сообщение WM_KEYDOWN работает не полностью, не все клавиши обрабатываются. Но вот причину такого поведения установить не удалось. Не помог ни Win32.hlp, ни MSDN. _________________ Здесь Вы там не найдете |
|
| В начало |
|
 |
 Шурик
Я живу тут....

Возраст: 42
Знак зодиака: 
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
|
|
|
Цитата |
|
Не знаю, по теме ли. Но может это что-то подскажет.
Как-то мне нужно было ловить нажатия стрелочек на форме. Но они не доходили до обработчиков. После долгиг разбирательств оказалось, что делфийская форма обрабатывает сообщения стрелок и табуляции чтобы использовать их для навигации по контролам. Это выполняет обработчик сообщения CM_DialogKey. Я лечил это так:
| delphi: | TMainForm = Class( TForm ) ... procedure CMDialogKey( var Message: TCMDialogKey ); Message CM_DialogKey; ... procedure TMainForm.CMDialogKey(var Message: TCMDialogKey); const Arrows = [ VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN ]; begin if not ( Message.CharCode in Arrows ) then Inherited; end;
|
_________________ Ответ готов, готов ли твой вопрос? |
|
| В начало |
|
 |
 Evgeny
Постоянный участник

Возраст: 51
Знак зодиака: 
Зарегистрирован: 26.06.2005
Сообщения: 152
Откуда: Омск
|
|
|
Цитата |
|
У меня программа полностью на API, и боюсь этот способ не поможет. Когда я ловил сообщения с помощью WinSight32 (из поставки Delphi), то при нажатии курсорных клавиш все сообщения идут. Только в диалоговое окно они не попадают, пропадают неизвестно где. Возможно глюк Гейтса. _________________ Здесь Вы там не найдете |
|
| В начало |
|
 |
|