Программное стробирование клавиатуры

Описываются принципы организации ввода, когда автоповтор клавиатуры подменяется автоповтором от мультимедийного таймера

При удерживании какой либо клавиши клавиатура начинает посылать повторяющиеся коды этой клавиши. Первый интервал - от 1/4 до 1 секунды, все последующие - короче, вполть до 30 символов в секунду.

Аппаратному стробированию (автоповторению) сопутствует ряд недостатков.

  1. Во-первых, интервалы стробирования одинаковы -
    • и для клавиш управления курсором,
    • и для клавиш ввода символов,
    • и для системных клавиш (выбор, выход, помощь и т.д.).
  2. Во-вторых, максимальная частота повторений слишком мала - для операций движения курсора её можно увеличить в 4-5 раз (что обеспечило бы перемещение курсора от одного края экрана до другого за пол секунды, а не за 2,5)
  3. В третьих движение не может проходить с нарастающей скоростью.
  4. В четвёртых, если программа не успевает обработать нажатия, они собираются в буфере клавиатуры и в некоторых случаях программа продолжает их отрабатывать уже после того, как пользователь принял решение прекратить действие и отпустил клавишу. Особенно это нежелательно для действий типа вход, выход, обращение к подсказке и т.п.
Программное стробирование позволяет обойти все эти недостатки. Оно реализуется следующим образом:

Для всей совокупности функций такой программы, как текстовый редактор достаточно трёх схем, сценариев стробирования.
  1. Схема по умолчанию - для ввода символов, приблизительно такая же, как обычная аппаратная схема клавиатуры. Это большой первый интервал, чтобы клавиши не "двоили" при однократных нажатиях, и далее короткий интервал (но не слишком) для ввода повторяющихся символов. Можно схему улучшить, немного добавив скорость и промежуточную фазу разгона.
  2. Схема для управления курсором - несколько шагов, фаз разгона, укороченный первый интервал и высокая скорость на последней фазе.
  3. Схема для управляющих команд, которая вообще запрещает стробирование - т.е. одна фаза в которой интервал повторений равен бесконечности
Пример использования объекта, упровляющего стробированием можно увидеть здесь

Литература по теме на сайте
Исходники.ру - описание соотношений между FormKyDown,FormKeyUp,FormKeyPress, между событиями на форме и на её компонентах.
Проект SWE для Windows
Основные свойства MIM и SWE(DOS)
(с) Можаровский С.Г. // mailto:mozharovskys@mail.ru // swHome page