среда, августа 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 вводиться не будут. Из-за такой мелочи можно убить много времени впустую.

5 комментариев:

BlooDHounD комментирует...

интересно как Вы вообще умудрились найти связь между запретом на ввод, и embed. я думаю, что слово "многие" сдесь не уместно :) скорее "некоторые" :) если Вы не добавите символы в embed-шрифт, то они всего-лишь не будут отображаться. вбитые символы на самом деле введены, просто не отображены.

Racer комментирует...

Ок, "многие" на "некоторые" пожалуй заменю. А вот насчет "вбитые символы на самом деле введены, просто не отображены" пожалуй не соглашусь. Ибо проверено.

BlooDHounD комментирует...

ну что ж ... рас проверено, что чего ж мне тут делать ? :)

у моего плэйера почему-то свойство text совершенно не завязано, на то, что сейчас отображено на экране.

Racer комментирует...

Ок, завтра проверю еще раз :)

Racer комментирует...

Еще раз проверил. Просто отключил кириллические символы. Трейсю свойство text по событию change. Английские буквы вводятся, кириллица - нет. Или я не понял вопроса?