30 ноября 2009 г.

Игра «Крестики-Нолики»

В целях тренировки написал на Flash игру «Крестики-Нолики», со всякими наворотами.

Кому скучно - можете развлечься.

Играть!

4 ноября 2009 г.

Калькулятор - простой и удобный

Поскольку идей по улучшению удобства использования чего-либо у меня много, а их реализации - увы, мало - то взял и кое-что сделал сам.

Итак, первая работа - Калькулятор. Простой, с большими цифрами, с отображением содержимого памяти, с историей расчетов и другими приятностями. Написан на Flash, и работает прямо в окне браузера.

Благодаря большим цифрам может быть использован людьми с недостаточно хорошим зрением.

Пользуйтесь для собственной выгоды!

Начать использование.

Flash не сбрасывает фокус ввода (AS2)

Делая одну программу, столкнулся с интересной особенностью – в флеш-ролике есть несколько динамических текстовых полей. В них включена возможность выделения – чтобы можно было скопировать оттуда информацию.

Кроме того, в ролике есть много кнопок – которые можно нажимать НЕСКОЛЬКО РАЗ ПОДРЯД – каждое последующее нажатие выполняет полезную работу.

Так вот, если мы выделим в одном из динамических текстовых полей какой-то текст (ну и скопируем его в буфер обмена), а затем начнем нажимать кнопки, то выделение текста не снимается. Другими словами, при первом нажатии кнопки (уже после выделения) она выполняет нужную работу, а вот последующих нажатий уже не воспринимает.

Попытки исследовать все это безобразие привели вот к чему.

При выделении текста динамическое текстовое поле получает фокус ввода. А при нажатии кнопки оно отдает его кнопке только на время, а после нажатия фокус ввода снова возвращается к текстовому полю.

Исследования проводились с помощью обработчика события onSetFocus – вот код, взял прямо из книги Д. Гурского:


Так вот, попытки снять выделение программно, с помощью кода


, почему-то не подействовало.

Ситуация крайне странная – поскольку попробовав создать новый Flash-ролик, а в нем сделать пару динамических текстовых полей и кнопку – все заработало как надо. Причем при нажатии кнопки текстовое поле само потеряло фокус ввода, без всяких программных изысков - и больше фокус к нему не возвращался.

Но выход надо было найти, и он был найден.

Итак, был создан маленький невидимый клип, который расположен на рабочем пространстве в сторонке.

Затем было указано, что этот клип может получить фокус программно, и что он не будет участвовать в клавиатурном обходе по нажатию Tab. Ну а после этого написана небольшая функция dropFocus () – которая переводит фокус на данный клип, а потом просто убирает с него фокус в никуда.

Вот весь код:


После чего вызов данной функции был вставлен в начало обработчиков событий кнопок. И все заработало как положено.

Хотя, в чем причина того, что текущий фокус ввода не сбрасывается самостоятельно – непонятна. А данный способ решения проблемы – ну, немного кривой :)

Впрочем, проблема решена, а это главное.