Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Использование клавиш для управления компонентами

Delphi , ОС и Железо , Клавиши

Использование клавиш для управления компонентами

Автор: Robert Wittig

Все, что написано на клаве
Ведет к погибели иль славе...

Так, если у меня есть своего рода кнопка (check, radio, speed и т.п.), то почему я не могу с помощью клавиш курсора управлять ею?

После некоторых экспериметов я создал метод, который привожу ниже, способный перехватывать в форме все нажатые клавиши позиционирования и управлять ими выбранным в настоящий момент элементом управления. Имейте в виду, что элементы управления (кроме компонентов Label) должны иметь возможность "выбираться". Для возможности выбрать GroupBox или другой компонент, удедитесь, что их свойство TabStop установлено в True. Вы можете переместить управление на GroupBox, но, так как он не выделяется целиком, узнать, что он действительно имеет управление, достаточно непросто. Если вам не нужно передавать управление в контейнерные элементы (нижеследующий код исходит из этого предположения), то вы можете управлять элементами, просто перемещая управление в сам GroupBox.

В нижеследующем коде FormActivate является обработчиком события формы OnActivate, тогда как ProcessFormMessages никакого отношения к событиям формы не имеет. Не забудьте поместить объявление процедуры ProcessFormMessages в секцию 'Private' класса вашей формы.

Надеюсь, что вам помог.


procedure TForm1.FormActivate(Sender: TObject);
begin
  { Делаем ссылку на нового обработчика сообщений }
  Application.OnMessage := ProcessFormMessages;
end;

procedure tForm1.ProcessFormMessages(var Msg: tMsg;
  var Handled: Boolean);
var
  Increment: Byte;
  TheControl: tWinControl;
begin
  { проверка наличия системного сообщения KeyDown }
  case Msg.Message of
    WM_KEYDOWN: if Msg.wParam in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT] then
      begin
        { изменяем величину приращения взависимости
        от состояния клавиши Shift }
        if GetKeyState(VK_SHIFT) and $80 = 0 then
          Increment := 8
        else
          Increment := 1;

        { Этот код перемещает управление на родительский
        GroupBox, если один из его контейнерных элементов
        получает фокус. Если вам необходимо управлять
        элементами внутри контейнера, удалите блок IF и
        измените в блоке CASE TheControl на ActiveControl }

        if (ActiveControl.Parent is tGroupBox) then
          TheControl := ActiveControl.Parent
        else
          TheControl := ActiveControl;

        case Msg.wParam of
          VK_UP: TheControl.Top := TheControl.Top - Increment;
          VK_DOWN: TheControl.Top := TheControl.Top + Increment;
          VK_LEFT: TheControl.Left := TheControl.Left - Increment;
          VK_RIGHT: TheControl.Left := TheControl.Left + Increment;
        end;

        { сообщаем о том, что сообщение обработано }
        Handled := True;
      end;
  end;
end;

Статья Использование клавиш для управления компонентами раздела ОС и Железо Клавиши может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Клавиши ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
28.03.2024 15:59:56/0.034173965454102/0