Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  124

•  TDictionary Custom Sort  3 311

•  Fast Watermark Sources  3 060

•  3D Designer  4 817

•  Sik Screen Capture  3 313

•  Patch Maker  3 527

•  Айболит (remote control)  3 628

•  ListBox Drag & Drop  2 990

•  Доска для игры Реверси  81 531

•  Графические эффекты  3 921

•  Рисование по маске  3 226

•  Перетаскивание изображений  2 607

•  Canvas Drawing  2 731

•  Рисование Луны  2 555

•  Поворот изображения  2 162

•  Рисование стержней  2 160

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 223

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 209

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 278

•  Игра Go (Го)  1 224

•  Симулятор лифта  1 470

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 350

•  HEX View  1 488

•  Физический маятник  1 355

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Автор: 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;





Похожие по теме исходники

Нейросеть для распознавания образов

Механизм станка качалки для нефти

Весы для взвешивания

Кувшины для воды

 

Доска для игры Реверси




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте