Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компонент не ловит WM_KEYDOWN :( [D6, WinXP]


ancara ©   (2005-03-02 11:26:00) 

Доброго времени суток, господа! Такая проблема, пишу свой компонент, табличка с ячецками, типа Grid. Наследовал его от TWinControl, положил на форму, рядом лежат StringGrid, кнопки там и пр... Тыкаю, значит, мышой на свой компонент, вроде как поставил на него фокус, нажимаю кнопку "ВНИЗ" фокус переходит к кнопке согласно TabOrder'у. Почему? Главное, когда фокус таким макаром доходит до StringGriв он на нем и остается, там внутри ячейки подсвечиваются. Как это так? Он же тоже от TWinControl!
Первым делом я тупо написал, типа, при сообщении WM_KEYDOWN оставить фокус на себе - фиг там, он это сообщение от стрелок не ловит. От всех других кнопок ловит а от стреклок нет, чем они хуже? Вообщем я уже замучался шастать по исходникам TStringGrid и его родителей, проясните мне ситуацию, пожалуйста, хоть в двух словах, как мне в своем компоненте  обработать сообщение WM_KEYDOWN (и др.)?
Заранее очень благодарен.


tunguss   (2005-05-30 14:18:00) [1]

Молчу. Если родитель TWinControl - то делаем именно так как сказано. Если нет - то ничего не делаем - все и так работает :). Все :).


tunguss   (2005-05-30 12:28:00) [2]

Да. предложенное здесь - полностью подходящее решение если наследовать от TCustom.* (выражаясь регулярными выражениями :) ), (еще, кроме того как здесь, оно рассмотрено здесь http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117163646&n=12), но если заказчик требует наследовать имеенно от наследника TWinControl :( каков тогдавыход?


tunguss   (2005-05-30 12:15:00) [3]

У кого есть похожие проблемы с некоторыми компонентами - прошу сюда - http://www.delphimaster.ru/cgi-bin/forum.pl?id=1116597900&n=12.А вообще наверное разумно саккумулировать всюважную информацию и создать новую ветку, а эти почистить - если конечно никто не против.


Юрий Зотов   (2005-03-02 13:47:00) [4]

> ancara ©   (02.03.05 13:27) [2]

> хотца свое от начала до конца сделать

Для учебной задачи - очень полезно. Но для рабочего компонента плохо - ведь придется частично продублировать код, который уже есть в VCL. Получится раздувание конечной программы.


ancara   (2005-03-02 13:27:00) [5]

Урра! Юрий Зотов, огромное спасибо, все как надо!
М-да, до этого сообщения я бы сам не додумался, я вообще копал в сторону всяких там стилей контролов и пр.


> вряд ли TWinControl - удачный предок для такого компонента.

да, с этим я согласен, отдаю себе отчет, что делаю... Просто лень было разбираться как там в них(TCustomGrid) все это работает, да и вообще хотца свое от начала до конца сделать (точнее от WinControl до конца :))
 Спасибо еще раз!


Юрий Зотов   (2005-03-02 13:08:00) [6]

Посмотрите обработку сообщения WM_GETDLGCODE в TCustomGrid. Вам нужно сделать примерно то же. Как минимум, результат должен содержать DLGC_WANTARROWS - тогда компонент сможет ловить и обрабатывать нажатия стрелок.

А вообще, вряд ли TWinControl - удачный предок для такого компонента. Есть ведь уже готовые заготовки таблиц (TCustomGrid и др.).


Наверх

Титульная страница Поиск, карта сайта Написать письмо