Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2011, 14:13   #1
mLight
 
Регистрация: 05.11.2011
Сообщений: 5
По умолчанию Обработка нажатия клавиш в TButton

Есть кнопка Act, на которой установлен фокус.
Нужно сделать обработку нажатия клавиш, а именно клавиш со стрелками.
Если просто через KeyDown писать VK_LEFT, то при нажатии на стрелку фокус переходит к следуйщей кнопке ТButton или другому компоненту, а событие не обрабатывается.

или хотябы подскажите как вообще сделать обработку для стелочек и пробела

Последний раз редактировалось mihali4; 11.11.2011 в 00:55.
mLight вне форума Ответить с цитированием
Старый 11.11.2011, 00:29   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Попробуйте так:
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Form1.KeyPreview:=True;
End;
...
Procedure TForm1.FormKeyUp(Sender: TObject; Var Key: Word;
Shift: TShiftState);
Begin
If Key = VK_LEFT Then
Form1.Caption:='Событие'
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 11.11.2011, 01:50   #3
mLight
 
Регистрация: 05.11.2011
Сообщений: 5
По умолчанию

Спасибо, все работает. Только если нажимать стрелочки, то фокус переходит к следуйщему элементу. Возвращаю обратно через SetFocus.
mLight вне форума Ответить с цитированием
Старый 11.11.2011, 08:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вычитал ещё такой способ в DelphiWorld
попробуйте. вдруг Вам понравится!

Цитата:
Существует множество методов решения этой проблемы, но самый быстрый способ, это перехват нажатия клавиш, перед тем как их получит форма:

В секции формы PRIVATE добавьте:

Код:
procedure CMDialogKey(var Msg: TWMKey); message CM_DIALOGKEY;

В секции IMPLEMENTATION добавьте:

Код:
procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
  if (ActiveControl is TButton) then
    if Msg.Charcode = VK_LEFT then begin
      Form1.Caption:='Событие ';
      Msg.Charcode := 0;
    end;
  inherited;
end;
Чтобы ускорить работу приложения,
не надо активизировать свойство формы KEYPREVIEW
я пример заменил на ваш код. ну и ещё поставил условие, чтобы проверка нажания срабатывала ТОЛЬКО когда фокус находится на кнопке. Если это не нужно - измените так, как Вам удобно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2011, 20:53   #5
mLight
 
Регистрация: 05.11.2011
Сообщений: 5
По умолчанию

Спасибо, давно искал именно это))
Только обьясните пару вещей:
Код:
procedure CMDialogKey(var Msg: TWMKey); message CM_DIALOGKEY//это незнаю что и почему в приват писать?
Msg.Charcode := 0; //это как я понял кол клавиш
inherited //прочитал что это конструктор\деструктор класса. Пожалуйста, обьясните что это.
Эсли что не так, извините за такие вопросы, только начал программировать
mLight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка нажатия клавиш в цикле mLight Общие вопросы Delphi 4 05.11.2011 19:03
Эмуляция нажатия клавиш KamiMAN Общие вопросы Delphi 5 13.03.2011 06:24
Комбинация нажатия клавиш IraPr Microsoft Office Access 1 04.10.2010 11:31
обработка нажатия клавиш VC++ консоль rest Помощь студентам 0 06.10.2009 07:53
Возможна ли обработка двойного щелчка мышью на кнопке (TButton)? Brother Win Api 3 04.12.2007 08:32