*closed* Мистика с обработчиком нажатий клавиш. [Delphi/общее]
Скорее всего в каких-нибудь родителях перехватывается.
З.Ы. В родителе нормально всё работает.
Я не знаю, как там что в дельфе, конечно. Но в винформах подобные штуки происходят постоянно и по вполне понятной причине. Ты ж понимаешь, надеюсь, что там под тонким слоем твоей аккуратненькой иерархии классов и вызовов методов между ними скрыто жуткое древнее винапи. Которое, на деле, всем и рулит. Начинается-то всё с какой-нибудь WM_KEYPRESS, прилетающей к WndProc дельфёгого TEdit'a, оттуда - к WndProc его предка, виндового стандартного Edit'а, ещё может WndProc дельфёгого TControl'a вызваться и всё такое. Если там где-то кто-то решил, что мессагу вполне удалось обработать, то до тебя она просто не дойдёт.
по существу:
у предка всё работает, значит с исходниками всё в порядке, стало быть ошибку надо искать в багокоде
ДАА! ещё: при отключённом-то эдиторе кнопка обрабатывается, причём явно не стандартной процедурой, а подмененой, и я в упор не могу понять ГДЕ .


у предка всё работаетОпределись про каких предков говоришь.

В общем я имел в виду 2 случая. Либо это съедается обработчиком из класса-предка. Либо это съедается контролом, в котором находится твой контрол.
лежит на TForm
Посмотри, не висит ли где менюшка (Popup или Main у которой одно из действий подвешено на Del. Тогда оно будет перехватываться раньше и тебе не приходить.

Экшн лист-то я просмотрел, а попап меню - нет, а там почему-то на несколько итемов процедуры напрямую, без экшенов повешены.
Оставить комментарий
kill-still
Правю баги в чужом коде, и столкнулся с такой мистической проблемой:надо поменять поведение компонента (потомок от TDrawGrid) при нажатии VK_DELETE (а конкретно отсутствие оного поведения при включоном эдиторе поставил во всех обработчиках брэкпоинты, запускаем. Если нажать любую другую клавишу, то в обработчик входит, если делит - то игнорирует вообще. Это всё при включоном эдиторе (property EditorMode). В нормальном режиме таблицы тоже в обработчик не входит, однако клавишу обрабатывает (удаляет значение в ячейке).
Компонент (грид этот) лежит прямо на форме.
У формы никакие обработчики не назначены, где перехватывается сообщение непонятно.
Написал перехватчик, хотел посмотреть откуда приходит мессадж, чтобы понять откуда он входит в обработчик. По Sender.ClassName не видит ничего.
Куда копать дальше ума не приложу. =(
куски кода:
ни в одну из процедур KeyDown он не заходит
еще компоненте присвоена процедура к OnKeyDown, но туда тоже не заходит
(я так понимаю сюда выполнение кода должно заходить в последнюю очередь, после того как он пойдёт из подмененого KeyDown по inherited в исходники, и уже оттуда в OnKeyDown)