Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   TextFormat для текстового поля типа INPUT (http://www.flasher.ru/forum/showthread.php?t=155762)

niks_13 10.05.2011 01:30

TextFormat для текстового поля типа INPUT
 
Доброй ночи всем. Проблема в следущем: INPUT поле отказывается обрабатывать TextFormat. Может я что-то не то делаю? Причём trace мне возвращает 50, хотя шрифт не становится 50-м. С DYNAMIC полем таких проблем не возникало.
Код AS3:

var tfCross:TextField = new TextField();
    tfCross.type = TextFieldType.INPUT;
    tfCross.width = tfCross.height = tfCross.x = tfCross.y = 100;
    tfCross.border = true;
    tfCross.maxChars = 10;
 
var tftCross:TextFormat = new TextFormat();
    tftCross.size = 50;
    tfCross.setTextFormat(tftCross);                       
addChild(tfCross);
trace(tftCross.size);


bav 10.05.2011 02:05

Прочитайте в хелпе про TextField.setTextFormat() и TextField.defaultTextFormat.

niks_13 10.05.2011 12:43

bav
Почитал, нашёл, допёр. Спасибо =)

Итак решение:
вместо
Код AS3:

tfCross.setTextFormat(tftCross);

должно быть:
Код AS3:

tfCross.defaultTextFormat = tftCross;

Добавлено через 7 часов 36 минут
А как насчёт параметра, к-рый позволяет задавать расстояние между буквами? Как его задать?
P.S. help читал - не понял. Здесь нуждаюсь в реальном примере реализации.

surlac 10.05.2011 22:19

Цитата:

Сообщение от niks_13 (Сообщение 995192)
... задавать расстояние между буквами?


Через стандартный TextFormat можно сделать так:
Код AS3:

var tf:TextField = new TextField();
var tformat:TextFormat = tf.defaultTextFormat;
tformat.letterSpacing = <VALUE>; // Ваше значение
tf.text = "Using TextFormat";
tf.setTextFormat(tformat);
addChild(tf);

Если вдруг понадобится TLF (у него намного шире функциональность чем у TextFormat и FTE), то для спейсинга можно сделать следующее:
Код AS3:

public class TLFTest extends Sprite
{   
    public function TLFTest()
    {   
        var tf:TextFlow = new TextFlow(TextFlow.defaultConfiguration);
        var para:ParagraphElement = new ParagraphElement();
        var span:SpanElement = new SpanElement();
        span.text = "Using TLF";
        para.addChild(span);
        tf.addChild(para);
        var tftlf:TextFlowTextLineFactory = new TextFlowTextLineFactory();
        tftlf.compositionBounds = new Rectangle(0, 0, 300, 300);
        var tlf:TextLayoutFormat = new TextLayoutFormat(tf.format);
        tlf.trackingLeft = <VALUE>; // Ваше значение
        tlf.trackingRight = <VALUE>; // Ваше значение
        tf.format = tlf;
        tftlf.createTextLines(clb, tf);                   
    }
 
    public function clb(txLine:TextLine):void
    {
        addChild(txLine);
    }


goodguy 10.05.2011 22:44

Цитата:

Через стандартный TextFormat можно сделать так:
А короче будет передать это значение прямо в конструктор TextFormat ;)

niks_13 10.05.2011 22:47

surlac
Сделал по 1-ому варианту:
Код AS3:

tfCross.letterSpacing = 20;

Хотя сам пробовал так делать и почему-то ошибка была, а вот Ваш код тупо скопипастил и вуаля - всё красиво и работает.
Спасибо)

goodguy
Тоже вариант, но что-то я в help'е не видел такого, ладно гляну повнимательнее. Спасибо.

Wolsh 11.05.2011 00:08

Цитата:

что-то я в help'е не видел такого
Потому что в конструкторе TextFormat этого параметра нет, для него есть сеттер.

niks_13 11.05.2011 08:19

Wolsh
Простите, что для него есть? О0

goodguy 11.05.2011 08:44

Сеттер

Функция вида
Код AS3:

public function set letterSpacing(value:int):void {
    _letterSpasing = value;
}

Вызывается как обычная публичная переменная

niks_13 11.05.2011 13:37

Теперь понял)

Добавлено через 25 часов 32 минуты
Есть у кого-нибудь идеи как отформатировать INPUT поле таким образом, чтобы оно было вида как, скажем, в винде, когда IP в настройки сетевухи вбиваем? В Delphi это maskEdit называется вроде бы. То бишь имеем строку INPUT, maxChars = 10. Значит может вводить 10 символов в любом порядке. Ну как в ''Поле Чудес'' горизонтальный кроссворд.

surlac 12.05.2011 20:38

Цитата:

Сообщение от niks_13 (Сообщение 995406)
имеем строку INPUT, maxChars = 10. Значит может вводить 10 символов в любом порядке

Для этого можно сделать следующее: отслеживаем ввод в INPUT, проверям вводимый символ и суммарную строку. Если не удовлетворяет, прерываем ввод.

Код AS3:

    public function TextFieldExample()
    {
        var myTextBox1:TextField = new TextField();
        myTextBox1.type = TextFieldType.INPUT;
        myTextBox1.addEventListener(TextEvent.TEXT_INPUT, textInputHandler);
        addChild(myTextBox1);
    }
 
    public function textInputHandler(e:TextEvent):void
    {                       
        var re:RegExp = /\D/;
        if (re.test(e.text) || e.target.text.length >= 10) {                               
            e.preventDefault();
        }                       
    }


niks_13 12.05.2011 23:48

Зачем такие сложности?
Код AS3:

tf.maxChars = 10;

прекрасно работает.
Нужен горизонтальный кроссворд на вроде того, как в передаче ''Поле Чудес'' с Кубовичем)))

Wolsh 13.05.2011 00:01

Чтобы, если не угадал букву и ввел неправильную - она не открывалась (не вводилась)?
Потрудитесь выражаться на языке тех, у кого спрашиваете помощи. Без отсылок в иные миры.

niks_13 13.05.2011 00:25

Вот:
[img]http://i11.***********/big/2011/0512/5b/e30d2a8b39894ba87dd170adbfbdf75b.jpg[/img]
Это INPUT поля, к-рые я в цикле создал. То есть я могу в любую клеточку букву вписать и всё. Но обрабатывать столько полей уж очень муторно, поэтому хочу 1 INPUT поле, к-рое будет выглядеть как на скриншоте. Возможно ли это?
Был у меня вариант - маски наложить на INPUT поле, но столкнулся с 2 проблемами:
1) текст можно вводить только с 1й "клетки"
2) буквы не всегда под маски попадают.

surlac 13.05.2011 00:48

Цитата:

Сообщение от niks_13 (Сообщение 995826)
Зачем такие сложности?...
Нужен горизонтальный кроссворд на вроде того, как в передаче ''Поле Чудес'' с Кубовичем)))

Любезный niks_13, не пора ли Вам в раздел Вакансии с такими запросами. Мы итак с Вами достаточно далеко отошли от сабжа ;).

Wolsh 13.05.2011 00:49

Чисто ради забавы - да, можно. Только мороки будет в 10 раз больше, чем с отдельными полями.
Если хочется поупражняться, вот подсказки -
1) Заполните пробелами, и можете вводить "где угодно".
2) TextFormat#tabStops
Удачи....

niks_13 13.05.2011 00:54

хм...попробую с пробелами, не думал, что возможно...


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

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