Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как отловить нажатие кнопок Shift или Ctrl при помощи ApplicationEvents?

375
18 сентября 2007 года
dominator
199 / / 16.10.2003
Здравствуйте!
Подскажите, пожалуйста, как, используя компонент ApplicationEvents, отловить нажатие кнопок Shift или Ctrl?
375
18 сентября 2007 года
dominator
199 / / 16.10.2003
Цитата: dominator
Здравствуйте!
Подскажите, пожалуйста, как, используя компонент ApplicationEvents, отловить нажатие кнопок Shift или Ctrl?



Разобрался: Msg.CharCode = 16 (Shift) и 17 (соответственно Ctrl)

А как поймать правый клик мыши?

261
18 сентября 2007 года
ahilles
1.5K / / 03.11.2005
 
Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message=WM_LBUTTONDOWN then
   begin
     //..........
    ShowMessage('правый клик');
   end;
end;
375
19 сентября 2007 года
dominator
199 / / 16.10.2003
Спасибо, с мышью все получилось!
Но выходит, чтобы отловить клик, нужно использовать событие Message.
У меня следующая задача. Когда нажимается правая кнопка мыши, должно отображаться всплывающее меню. Если в это время нажата кнопка Shift - другое меню, Ctrl - третье.
Сначала попытался так:
 
Код:
if(Msg.CharCode = 16) then begin //Shift
      DBGrid_Main.PopupMenu := PopupActionBar_MainShift;
   end
   else if(Msg.CharCode = 17) then begin //Ctrl
      DBGrid_Main.PopupMenu := PopupActionBar_Main;
   end
   else begin
      DBGrid_Main.PopupMenu := PopupActionBar_Main;
   end;

Это в OnShortCut. При последней проверке возвращается первое всплывающее меню.
Но это действие не будет выполнено если не нажата какая-либо клавиша.
Как все эти действия можно совместить в одном обработчике?
Ведь в обработчике OnMessage, если я правильно понял, нельзя отловить нажатую клавишу, в свою очередь клик мыши не перехватить в OnShortCut.
261
19 сентября 2007 года
ahilles
1.5K / / 03.11.2005
всё надо делать через событие Message
смотри сообщение WM_KEYDOWN
 
Код:
if Msg.message=WM_KEYDOWN then
  begin
    //обработка нажатия кнопки
  end;

самое главное это расшифровать virtual-key, который находиться в wParam, поищи по форуму - было уже что то похожее (функция GetKeyState)
в событии OnShortCut виртуальный код нажатия находится в Msg.CharCode
375
20 сентября 2007 года
dominator
199 / / 16.10.2003
Цитата: ahilles
всё надо делать через событие Message
смотри сообщение WM_KEYDOWN
 
Код:
if Msg.message=WM_KEYDOWN then
  begin
    //обработка нажатия кнопки
  end;

самое главное это расшифровать virtual-key, который находиться в wParam, поищи по форуму - было уже что то похожее (функция GetKeyState)
в событии OnShortCut виртуальный код нажатия находится в Msg.CharCode



Спасибо большое! Попробую разобраться.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог