Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изменение размера поля - динамически (http://www.flasher.ru/forum/showthread.php?t=213474)

in4core 06.10.2016 21:31

Изменение размера поля - динамически
 
Коллеги, очень сложный и важный вопрос, прошу помощи.

Задача следующая - из swf подгружается графика с текстовыми полями. Обычные поля выравненные по центру, размером скажем 20pt . Задача уменьшать размер шрифта или увеличивать в зависимости сколько символов влезает, вообщем чтобы текст не был обрезанным.

Сделал вот такой вот метод для этого :

Код AS3:

public static function updateFormat(tf:TextField, size:int):void
{
        var format:TextFormat = tf.getTextFormat();
 
        format.size = size;
        tf.setTextFormat( format );
}
 
public static function gen(tf:TextField , useY:Boolean = false):void
{
        var format:TextFormat = tf.getTextFormat();
        var initSize:int = int(format.size);
 
        if (tf.textWidth > tf.width - 20)
        {
                while ( tf.textWidth > tf.width - 20 )
                {
                        initSize--;
                        if(useY) tf.y += 1;
                        updateFormat(tf, initSize);
                }
        }
        else if (tf.textWidth < tf.width - 20)
        {
                while ( tf.textWidth < tf.width - 20 )
                {
                        initSize++;
                        if(useY) tf.y += 1;
                        updateFormat(tf, initSize);
                }
        }
}

Результат вроде есть, но сами понимаете не очень точный. Но это пол беды. Главная беда в том, что текст при изменении - меняет свой формат обратно, так как он подгруженный и формат у него вроде как изменить нельзя навсегда ( если не ошибаюсь) . А в некоторым моменты врмени текст меняется как счетчик скажем за 1 сек от 0 до 100. И каждые 30 мс вызывать метод описанный выше - будет затратно.
Очень нужна ваша помощь. Спасибо

Bletraut 06.10.2016 23:02

Код AS3:

Но это пол беды. Главная беда в том, что текст при изменении - меняет свой формат обратно, так как он подгруженный и формат у него вроде как изменить нельзя навсегда ( если не ошибаюсь) . А в некоторым моменты врмени текст меняется как счетчик скажем за 1 сек от 0 до 100. И каждые 30 мс вызывать метод описанный выше - будет затратно.

Код AS3:

                {
                        var format:TextFormat = tf.getTextFormat();
 
                        format.size = size;
                        tf.defaultTextFormat = format;
                }


in4core 06.10.2016 23:50

да да. только после такой операции флешка виснет, как на бесконечном цикле

undefined 07.10.2016 00:25

может в загружаемой флэшке попробовать allowDomain("*");
ПС:А где сказано что текст формат у загруженных флэшек становится неизменным?

KBAC 07.10.2016 13:11

Подпишись на change и вызывай свой gen

in4core 07.10.2016 15:48

КВАС - change для инпута, чтоб вы знали.

KBAC 08.10.2016 18:16

Точно. Я и забыл

dimarik 10.10.2016 21:05

Цитата:

Сообщение от in4core (Сообщение 1196609)
Главная беда в том, что текст при изменении - меняет свой формат обратно, так как он подгруженный и формат у него вроде как изменить нельзя навсегда ( если не ошибаюсь)

Код AS3:

tf.defaultTextFormat = textFormat;

Должно решить проблему форматирования при изменении текста. Почему это вводит флешку в бесконечный цикл нужно решать отдельно. Сделай минимальный пример и убедись, что все ок, затем исключай потихоньку сложные вещи.

PS. Была бы память в организме, я бы точно вспомнил что не так в подгружаемых с помощью swf текстфилдах. Я точно помню, что то-то с ними не так было. Или было так, но был момент. У разрабов флекса тоже было обозначение проблемы.

in4core 10.10.2016 22:42

Дима привет, не решает, так как почему то если делать так

tf.defaultTextFormat = textFormat;
tf.setTextFormat(textFormat);
зависания нет, но текст вообще пропадает, а если убрать setTextFormat второй строкой, то бесконечный цикл. Видимо да - есть какой то нюанс. Но пока отказались вообще от этого, просто уменьишли поле и забили. Хотя на будущее интересно .
P.s - код привел полный, поэтому страннтсти в зависании цикла исключены, вроде бы.

elder_Nosferatu 11.10.2016 15:37

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


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

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