Вход

Просмотр полной версии : Проблема с input font-embedded текстбоксами


arrivano
12.10.2006, 01:48
Всем привет !!
Я столкнулся со следующей проблемой:
Нужно динамически создать input font-embedded текстбокс(чтобы можно было непосредственно во время исполнения программы, писать заданным шрифтом).
Казалочь бы что тут сложного. Но!!! оказывается так просто не получится:

var my_fmt:TextFormat = new TextFormat();
my_fmt.font = "Font1";
this.createTextField("my_txt", this.getNextHighestDepth(), 10, 10, 160, 120);
my_txt.type="input";
my_txt.border=true;
my_txt.embedFonts = true;

Это работать не будет!!:eek: Чтобы в тексбоксе можно было что-нибудь писать, нужно чтобы ему было присвоено какое-нибудь значение, например:
my_txt.text="asd";
причём длина строки не должна быть нулевой.
Таким образом, получается, что даже если мы в качестве начального значение поставим пробел (" "), то пользователь, при нажатии на текстбокс будет вынужден сперва удалить этот пробел, а потом уже начать что-нибудь вводить. Это не есть хорошо.
Как решить эту проблему, чтобы изначально строка была пустой, и пользователь при клике на текстбокс видел её как пустую строку (без всякого начального пробела ).
Вот как это реализовывается:
1. первая часть без изменений:

var my_fmt:TextFormat = new TextFormat();
my_fmt.font = "Font1";
this.createTextField("my_txt", this.getNextHighestDepth(), 10, 10, 160, 120);
my_txt.type="input";
my_txt.border=true;
my_txt.embedFonts = true;

2. далее, сам трикс:
chr(1) - это системный символ, который в текстбоксе просто не видно, он "нулевой длины". Его и присваиваем.

my_txt.text=chr(1);
my_txt.setTextFormat(my_fmt);

3. но нам всё-таки хочется полностью избавить от этого символа, т.к. если мы будем обрабатывать текстовое поле посимвольно, то в начале строки у нас будет присутствовать символ с кодом "1". вот что мы делаем:
при вводе в текстбокс первого символа, удаляем наш chr(1), и на его место присваиваем только-что введеный символ.

my_txt.onChanged=function(textfield_txt:TextField)
{
if(textfield_txt.text.charCodeAt(0)==1)
textfield_txt.text=textfield_txt.text.charAt(1);
}


Вот такой вот трикс )))
Пользуйтесь от души.
Думаю он многим пригодится)) ;)


пот полный (склееный) листинг:

var my_fmt:TextFormat = new TextFormat();
my_fmt.font = "Font1";
this.createTextField("my_txt", this.getNextHighestDepth(), 10, 10, 160, 120);
my_txt.type="input";
my_txt.border=true;
my_txt.embedFonts = true;
my_txt.text=chr(1);
my_txt.setTextFormat(my_fmt);
my_txt.onChanged=function(textfield_txt:TextField)
{
if(textfield_txt.text.charCodeAt(0)==1)
textfield_txt.text=textfield_txt.text.charAt(1);
}

Dendroid
12.10.2006, 04:30
:eek: ахринеть (извиняюсь).

А может лучше добавить для вводимых символов этот самый фонт? Это называется setNewTextFormat() - не путать с setTextFormat().

var my_fmt:TextFormat = new TextFormat();
my_fmt.font = "Font1";
this.createTextField("my_txt", this.getNextHighestDepth(), 10, 10, 160, 120);
my_txt.type="input";
my_txt.border=true;
my_txt.embedFonts = true;
my_txt.setNewTextFormat(my_fmt);

arrivano
12.10.2006, 05:34
Dendroid, :) спасибо )))
это дейстивтельно гениально и просто )))!!!
хехе )