| Автор
| Сообщение |
|
|
|
Цитата |
|
Здравствуйте, давненько сюда не заглядывал!
Мужики, помогите, перелопатил кучу ссылок в Инете, нашел ответ как это сделать в Clipper, Fox, Pascal, C и пр., но только не в дельфи.. Ситуация такая: в DBGridEh обрабатываю нажатие клавиш событием DBGridEhKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState). По нажатию <+> на дополнительной клавиатуре помечаю все записи. Всё бы и ничего, но символ <+> появляется в текущем поле ввода. Присвоение переменной Key какого-нибудь значения, например Key:=VK_ESCAPE, ни к чему не приводит и, как мне кажется, полностью игнорируется программой. Два решеньица нашлись, но оба горбастенькие: первое - отключил AutoEdit, теперь стало неудобно работать с данными - все время надо включать режим редактирования; другое решение более удачное - через "горячие клавиши" PopupMenu, отлично все работает, но другая проблемка - процедура обработки нажатий клавиш у меня общая для всех форм, содержащих дбгриды, и в этом случае нужно дублировать PopupMenu на каждой форме. Вобщем все эти обходные пути выглядят непрофессионально и действуют на меня удручающе. Отличный выход - это просто очистить буфер клавиатуры.. Посоветуйте как это делают специалисты в Delphi, а.. |
|
| В начало |
|
 |
|
|
 |
|
|
|
Цитата |
|
if (key='+') then key:= #0;
на KeyPress вставь |
|
| В начало |
|
 |
 Шурик
Я живу тут....

Возраст: 42
Знак зодиака: 
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
|
|
|
Цитата |
|
Вобще-то, буфер клавиатуры -- это в ДОСе. В Виндах есть только очередь сообщений, пришедших программе. Тебе нужно обработать сообщения от клавы раньше, чем это сделает DBGridEh.
В принципе (в большинстве Control-ов) достаточно в OnKeyXxxx присвоить key:=#0 при получении соответствующей клавиши. Пробуй... Возможно, ты это и делал, но в OnKeyDown, а Grid её обрабатывал по KeyPress.
Лезть глубже -- это переопределять обработку сообщений клавы в Grid-е. Но обычно достаточно переопределить метод DoKeyDown, DoKeyPress, DoKeyUp. Естественно, придётся делать потомка Grid-а. А лишняя морока. Так что пытайся сделать более простыми методами -- через обнуление Key в OnKeyXxxx. _________________ Ответ готов, готов ли твой вопрос? |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Спасибо за ответы и советы,
| Цитата: | if (key='+') then key:= #0;
на KeyPress вставь |
на данном этапе удовлетворяет.  |
|
| В начало |
|
 |
|