среда, августа 13, 2008

Ограничение в Input-TextField. AS3

Для того, что бы ограничить ввод, некоторые используют окно "Character Embedding" (кнопка "Embed"). Указав нужные диапазоны символов, мы не только ограничиваем внедрение шрифта, но и ограничиваем возможность ввода символов в строку.

Однако, это не всегда работает верно. Точнее, работает хорошо, но не предназначено для ограничения ввода символов. Вот пример, с которым я столкнулся. Я делаю Flex-компонент во Flash IDE и вставляю его в Flex-проект. Компонент содержит строку ввода с описанным выше ограничением шрифта (без некоторого диапазона символов). В свою очередь, Flex-проект уже содержит внедрение того же шрифта для своих нужд. Но только уже без ограничений (с наличием этого диапазона символов). В итоге, при конечной сборке проекта, строка ввода компонента беспрепятственно позволяет вводить все символы, не смотря на описанные выше ограничения. По всей видимости, шрифт, внедренный в компонент объединяется при компиляции с тем, что внедрен в Flex-проекте.

Для того, чтобы правильно ограничить ввод, в TextField предусмотрено свойство restrict.
Это строка, в которой можно указать как простую последовательность символов ("!#$%()*"), так и диапазоны символов ("0-9 A-Z a-z"). Символы, которые указаны в строке restrict можно будет вводить в поле ввода TextField. Ввод других символов будет запрещен. Для исключения символов из диапазона имеется спец-символ "^", после которого указывается исключаемый символ или диапазон символов. В хелпе про это всё хорошо написано.

Здесь есть один подводный камень. Если вы указываете в restrict диапазон в кириллице - обязательно обратите внимание на кодировку AS-файла, который содержит этот код. Если он не в кодировке UTF-8, то русские буквы в TextField вводиться не будут. Из-за такой мелочи можно убить много времени впустую.

среда, августа 06, 2008

Список без подсветки и выделения элементов. Flex

Элементарная задача - есть компонент список (в моем случае - это TileList). Его элементы (itemRenderer'ы) сами обрабатывают мышиные события наведения/нажатия. Нужно, чтобы сам компонент списка не делал никаких подсветок и выделений элементов.
Казалось бы - тривиальная задача. Ничего подобного.
Одними стилями этого не сделать, что лишний раз доказывает несовершенство механизма скинирования Flex.
Решение - создание потомка и перекрытие методов:
protected function drawSelectionIndicator(...) и protected function drawHighlightIndicator(...)
Код прилагается.

Посильную помощь в раскопках оказала статья: Flex Tutorial - Image ItemRenderer.

Не понимаю, почему в одних случаях модель цвета #RRGGBBAA реализована, а в других - только #RRGGBB? Ведь как было бы удобно просто задать стиль themeColor="#00000000" и не парить мозг?