![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наследник DBGrid и обработка клавиш при активном InplaceEdit [D5]
KSergey © (2003-10-21 14:08:00)
Проблема проста: надо повешать в компоненту свою реакцию на некую клавишу. Но если активен InplaceEdit - то клавиши идут к нему. При этом в TInplaceEdit.KeyDown (ну т.е. у предка InplaceEdit"ора) вызывается только обработчик, повешанный на OnKeyDowd parent"а. А собственный его метод KeyDown не вызывается.
Более того. Сам класс TDBGridInplaceEdit определен в секции implementation, т.е. я не могу сделать своего наследника TDBGridInplaceEdit и создавать уже его (в CreateEditor) со своей обработкой чего надо.
Вопрос: куда привеситься в наследнике TDBGrid, чтобы обрабатывать в том числе и клавиши при активном редактировании поля колонки?
KSergey (2003-10-21 15:14:00) [1]
[2] Vlad © (21.10.03 14:20)
Ага, а его переопредеит кто-нибудь - и приехали
Да и для компонента такие штуки делать - не смешно, однако.
Если кому интересно - выкрутился так.
Переопределил ф-цию окна для InplaceEdit"ора
function TdoDBGrid.CreateEditor: TInplaceEdit;
begin
Result := inherited CreateEditor;
FInplEdPrevWndProc := Result.WindowProc;
Result.WindowProc := InplEdWndProc;
end;
Ну а в InplEdWndProc уже определяюсь с нужным сообщением - и далее по сценарию...
Во всяком случае работает, но от дельных предложений не откажусь ;)
Vlad (2003-10-21 14:20:00) [2]
Application.OnMessage
KSergey (2003-10-21 14:09:00) [3]
Да, вариант "скопировать текст реализации TDBGridInplaceEdit в свой модуль" - не нравится, мягко говоря...