Как перехватить нажатия функциональных клавиш и стрелок?

Автор: Arx ( http://arxoft.tora.ru )
Проверяйте значение переменной key на равенство VK_RIGHT, VK_LEFT, VK_F1 и т.д. на событии KeyDown формы

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_RIGHT then

  Form1.Caption := 'Right';

 if Key = VK_F1 then

  Form1.Caption := 'F1';

end;

Взято из http://forum.sources.ru

Обработка нажатий клавиш вверх-вниз

Автор: Галимарзанов Фанис

Почти всегда требуется обработка нажатий клавиш "вверх-вниз" для смены фокуса ввода - мои "тетки-юзеры" боются мышей, да и сам я не любитель комбинаций мышь-клавиатура.

procedure TfmAbProps.edNameKeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

 if (Key = vk_down) and

  not (ssAlt in Shift)

  {// здесь обработка для "выпадающих" окошек типа TRxDBCalcEdit} then

 begin

  Key := 0;

  Select(Sender as TWinControl, true, true);

 end

 else if Key = vk_up then

 begin

  Key := 0;

  Select(Sender as TWinControl, false, true);

 end;

end;

Для элементов редактирования типа TDbEdit, TRxDBCalcEdit or TDBDateEdit назначим

OnKeyDown:=edNameKeyDown

Сложнее с типами вроде TRxDBLookupCombo. Наш прежний обработчик для них не подходит. Я пытался изменить характер TRxDBLookupCombo - но вовремя опомнился - есть же FormKeyDown;

procedure TfmAbProps.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (ActiveControl is TRxDBLookupCombo) then
 begin
  if Key = vk_down then
  begin
  if not (ssAlt in Shift) and not
  // здесь нельзя обработать нажатие при вызове "выпадающего"
  (ActiveControl as TRxDBLookupCombo).IsDropDown then
  begin // и в случае уже "выпвшего"
  Key := 0;
  selectnext(ActiveControl, true, true);
  end;
  end
  else if Key = vk_up then
  begin
  if not (ActiveControl as TRxDBLookupCombo).IsDropDown then
  begin
  Key := 0;
  selectnext(ActiveControl, false, true);
  end;
  end;
 end;
end;

http://delphiworld.narod.ru/ DelphiWorld 6.0

//Автор: Cheers, Julian (TeamB & TurboPower Software)

procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
...
procedure TMyControl.WMGetDlgCode(var Msg : TMessage);
begin
 Msg.Result := DLGC_WANTARROWS;
end;


http://delphiworld.narod.ru/
DelphiWorld 6.0

Автор: Robert Wittig
Вы можете перехватывать нажатие курсорных клавиш на уровне приложения:
Создайте HandleMessages как метод формы и затем назначьте его Application.HandleMessages.

procedure tForm1.HandleMessages(var Msg: tMsg; var Handled: Boolean);
begin
 if (Msg.Message = WM_KeyDown) and
  (Msg.wParam in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT]) then
 begin
  case Msg.wParam of
  VK_UP: ShowMessage('Нажата стрелка вверх');
  VK_DOWN: ShowMessage('Нажата стрелка вниз');
  VK_LEFT: ShowMessage('Нажата стрелка влево');
  VK_RIGHT: ShowMessage('Нажата стрелка вправо');
  end;
  Handled := True;
 end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMessage := HandleMessages;
end;


http://delphiworld.narod.ru/
DelphiWorld 6.0

Спасибо!

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...