![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компонент не ловит 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 и др.).