В целях тренировки написал на Flash игру «Крестики-Нолики», со всякими наворотами.
Кому скучно - можете развлечься.
Итак, первая работа - Калькулятор. Простой, с большими цифрами, с отображением содержимого памяти, с историей расчетов и другими приятностями. Написан на Flash, и работает прямо в окне браузера.
Благодаря большим цифрам может быть использован людьми с недостаточно хорошим зрением.
Пользуйтесь для собственной выгоды!
Делая одну программу, столкнулся с интересной особенностью – в флеш-ролике есть несколько динамических текстовых полей. В них включена возможность выделения – чтобы можно было скопировать оттуда информацию.
Кроме того, в ролике есть много кнопок – которые можно нажимать НЕСКОЛЬКО РАЗ ПОДРЯД – каждое последующее нажатие выполняет полезную работу.
Так вот, если мы выделим в одном из динамических текстовых полей какой-то текст (ну и скопируем его в буфер обмена), а затем начнем нажимать кнопки, то выделение текста не снимается. Другими словами, при первом нажатии кнопки (уже после выделения) она выполняет нужную работу, а вот последующих нажатий уже не воспринимает.
Попытки исследовать все это безобразие привели вот к чему.
При выделении текста динамическое текстовое поле получает фокус ввода. А при нажатии кнопки оно отдает его кнопке только на время, а после нажатия фокус ввода снова возвращается к текстовому полю.
Исследования проводились с помощью обработчика события onSetFocus – вот код, взял прямо из книги Д. Гурского:
Так вот, попытки снять выделение программно, с помощью кода
, почему-то не подействовало.
Ситуация крайне странная – поскольку попробовав создать новый Flash-ролик, а в нем сделать пару динамических текстовых полей и кнопку – все заработало как надо. Причем при нажатии кнопки текстовое поле само потеряло фокус ввода, без всяких программных изысков - и больше фокус к нему не возвращался.
Но выход надо было найти, и он был найден.
Итак, был создан маленький невидимый клип, который расположен на рабочем пространстве в сторонке.
Затем было указано, что этот клип может получить фокус программно, и что он не будет участвовать в клавиатурном обходе по нажатию Tab. Ну а после этого написана небольшая функция dropFocus () – которая переводит фокус на данный клип, а потом просто убирает с него фокус в никуда.
Вот весь код:
После чего вызов данной функции был вставлен в начало обработчиков событий кнопок. И все заработало как положено.
Хотя, в чем причина того, что текущий фокус ввода не сбрасывается самостоятельно – непонятна. А данный способ решения проблемы – ну, немного кривой :)
Впрочем, проблема решена, а это главное.