procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message=WM_LBUTTONDOWN then
begin
//..........
ShowMessage('правый клик');
end;
end;
Как отловить нажатие кнопок Shift или Ctrl при помощи ApplicationEvents?
Подскажите, пожалуйста, как, используя компонент ApplicationEvents, отловить нажатие кнопок Shift или Ctrl?
Цитата: dominator
Здравствуйте!
Подскажите, пожалуйста, как, используя компонент ApplicationEvents, отловить нажатие кнопок Shift или Ctrl?
Подскажите, пожалуйста, как, используя компонент ApplicationEvents, отловить нажатие кнопок Shift или Ctrl?
Разобрался: Msg.CharCode = 16 (Shift) и 17 (соответственно Ctrl)
А как поймать правый клик мыши?
Код:
Но выходит, чтобы отловить клик, нужно использовать событие 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;
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.
смотри сообщение WM_KEYDOWN
Код:
if Msg.message=WM_KEYDOWN then
begin
//обработка нажатия кнопки
end;
begin
//обработка нажатия кнопки
end;
самое главное это расшифровать virtual-key, который находиться в wParam, поищи по форуму - было уже что то похожее (функция GetKeyState)
в событии OnShortCut виртуальный код нажатия находится в Msg.CharCode
Цитата: ahilles
всё надо делать через событие Message
смотри сообщение WM_KEYDOWN
самое главное это расшифровать virtual-key, который находиться в wParam, поищи по форуму - было уже что то похожее (функция GetKeyState)
в событии OnShortCut виртуальный код нажатия находится в Msg.CharCode
смотри сообщение WM_KEYDOWN
Код:
if Msg.message=WM_KEYDOWN then
begin
//обработка нажатия кнопки
end;
begin
//обработка нажатия кнопки
end;
самое главное это расшифровать virtual-key, который находиться в wParam, поищи по форуму - было уже что то похожее (функция GetKeyState)
в событии OnShortCut виртуальный код нажатия находится в Msg.CharCode
Спасибо большое! Попробую разобраться.