Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


Как програмно очистить буфер клавиатуры в Delphi


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
KVas
Гость







СообщениеСр, 21-Июн-2006 15:46    Заголовок сообщения: Как програмно очистить буфер клавиатуры в Delphi
Цитата

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







СообщениеСр, 21-Июн-2006 16:02 
Цитата

if (key='+') then key:= #0;
на KeyPress вставь
В начало
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеСр, 21-Июн-2006 16:30 
Цитата

Вобще-то, буфер клавиатуры -- это в ДОСе. В Виндах есть только очередь сообщений, пришедших программе. Тебе нужно обработать сообщения от клавы раньше, чем это сделает DBGridEh.

В принципе (в большинстве Control-ов) достаточно в OnKeyXxxx присвоить key:=#0 при получении соответствующей клавиши. Пробуй... Возможно, ты это и делал, но в OnKeyDown, а Grid её обрабатывал по KeyPress.

Лезть глубже -- это переопределять обработку сообщений клавы в Grid-е. Но обычно достаточно переопределить метод DoKeyDown, DoKeyPress, DoKeyUp. Естественно, придётся делать потомка Grid-а. А лишняя морока. Так что пытайся сделать более простыми методами -- через обнуление Key в OnKeyXxxx.

_________________
Ответ готов, готов ли твой вопрос?
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KVas
Гость







СообщениеЧт, 22-Июн-2006 9:50 
Цитата

Спасибо за ответы и советы,
Цитата:
if (key='+') then key:= #0;
на KeyPress вставь

на данном этапе удовлетворяет. Улыбка
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100