Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблема с input font-embedded текстбоксами (http://www.flasher.ru/forum/showthread.php?t=86299)

arrivano 12.10.2006 01:48

Проблема с input font-embedded текстбоксами
 
Всем привет !!
Я столкнулся со следующей проблемой:
Нужно динамически создать 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, :) спасибо )))
это дейстивтельно гениально и просто )))!!!
хехе )


Часовой пояс GMT +4, время: 14:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.