ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
218109
mazur (27.10.2010 08:46, просмотров: 3863)
Здравствуйте! Да, я уже задавал по этой теме вопрос, но в данном случае, по этой теме у меня последние вопросы. Это мне на ирк-канале вжевывали О_о ...
процедура опроса формирует слово состояния кнопок, затем процедура разбора анализирует изменения этих состоянии и формирует события типа "произожло нажатие кнопки N", "произожло отпускание кнопки N", "кнопка N удерживается". Дальше диспетчер событий по нужному событию вызывает нужную процедуру Таким образом, лучше сделать сканирование матрицы (или просто массива) кнопок отдельно, анализ отдельно. сканирование в простейшем случае может быть просто чтением порта, если кнопки висят на пинах подряд . Дальше процедура анализа Обзовем ее "наблюдатель" Она как и сканирование, вызывается в каждом цикле программы Наблюдатель смотрит на слово состояния, сравнивая его с предыдущим запомненным состоянием. В самом начале в качестве запомненного, конечно, "все выключены" при обнаружении неравенства - проверяем, какие именно биты изменились в цикле по битам соответствено, получаем события нижнего уровня - "кнопка нажалась" "кнопка отпустилась" Если "кнопка нажалась" - запускаем виртуальный таймер, соответствующий кнопке (позаботимся чтоб на каждую кнопку был свой таймер - см. Татарчевского часть 5 ) если "кнопка отпустилась", а таймер еще не отработал - таймер сбрасываем и выставляем событие "кратковременное нажатие" (событие - на самом деле это просто флаг такой, сбрасываемый после использования) если таймер успел отработать - выставляем событие "длительное нажатие" Дальше эти события-флаги анализирует диспетчер, таке вызываемый в главном цикле диспетчер берет значит эти события-флаги, (не забывая сбрасывать после анализа) Впрочем, "кнопка нажалась" его не волнует это событие можно не выставлять важны именно "краткое нажатие" "удержание" и "отпускание" ну и смотрит, для какой кнопки какое событие произошло краткое нажатие плюса или минуса - вызываем процедуру/функцию инкремента или декремента, сбрасываем флаг Если "удержание" - для плюса-минуса опять же вызываем нужную процедуру, но флаг не сбрасываем для ввода соответственно вызываем функцию запоминания и для ввода флаг сбрасываем, Для плюса-минуса флаг "удержание" сбрасываем по поступлению события "отпускание" Вот где-то так.
Резюмируя, на удержание на каждую кнопку ставится флаг. Вопросы следующие: Этот флаг потом проверяется в обработчиках клавиш? Или, если этот флаг установлен, то формируется виртуальная клавиша (термин из цикла статей Татарчевского), и по виртуальной клавише вызывается соответствующая функция? Вопрос следующий. Я видел такую реализацию: Нажимая и удерживая клавишу параматры начинают меняться с увеличивающейся скоростью. После прочтения материалов, догадываюсь, что это реализуется в процедуре, которая выставляет события нажатие, удержание, автоповтор. Что скажете?