Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   TLF + Embed картинки (http://www.flasher.ru/forum/showthread.php?t=139445)

s8000_1 30.04.2010 22:15

TLF + Embed картинки
 
Есть картинка:

Код AS3:

[Embed(source='icon.png')]
public var iconClass:Class;

Ее надо вставить в TextFlow. При этом не хочется заморачиваься на AS создание текста, ибо это очень громоздко. А хочется использовать класс типа TextConverter:

Код AS1/AS2:

var tF:TextFlow = TextConverter.importToFlow("<p><img src='XXXX'/><span>текст</span></p>", TextConverter.TEXT_FIELD_HTML_FORMAT)

Но как в img запихнуть вшитую картинку?

Obi 30.04.2010 22:27

ну вообще (new iconClass() as Bitmap) будет дисплейобжектом, который можно туда впихнуть, только не помню как

s8000_1 30.04.2010 22:32

Obi, ну весь вопрос как раз "как именно впихнуть" :)

Obi 30.04.2010 23:15

Ну документацию чтоли посмотрите. Мне лень, но когда я использовал тлф, то впихивал.
З.Ы.: Наверняка не самый правильный вариант, но можно присвоить элементу id, а потом (getElementById('imageId') as GraphicElement).source = myDObj; Ну или как-то так.

BlooDHounD 01.05.2010 15:05

s8000_1, если Вы читали доку, то Вы в курсе, что подставлять надо имя класса. осталось самое элементарное: узнать имя класса.

etc 02.05.2010 13:31

Когда мне нужно было вставить embedded-картинку с полем, для меня было неожиданностью тот факт, что в AS3 этого нет.
Не знаю, как сейчас, но тогда никакого упоминания о том, что можно вставлять картинки из памяти не было.

BlooDHounD 02.05.2010 15:52

а если сделать getQualifiedClassName и посдставить содержание в src?

etc 02.05.2010 16:01

Не работало. Сейчас не знаю, не проверял.

dimarik 03.05.2010 22:24

В порядке бреда ). Дождаться события IOErrorEvent.IO_ERROR и сделать
Код AS3:

(event.target as LoaderInfo).loader.loadBytes(iconClass);

Только эмбеддить нужно как bytestream.

s8000_1 03.05.2010 23:42

dimarik, проще сначала сделать src=@abc@, потом в цикле пробежаться по всем объектам TextFlow и сделать замены :)

BlooDHounD 04.05.2010 13:26

а чем мой способ не подходит?

dimarik 05.05.2010 00:48

Ты не предоставил тестов )

BlooDHounD 05.05.2010 02:13

dimarik, поиск по форуму рулит =)

etc 05.05.2010 08:10

С именем класса работает, просто в моих тестах в html не было ничего, кроме картинки, в результате она не отображалась никак.

†‡Paladin‡† 05.05.2010 16:10

Можно взглянуть на работающий пример? У меня не получилось.

Код AS3:

<img source="Main__embed_css____smiles_simple_png_1566675966"/>

UPD. Судя по исходникам TLF просто засунуть getQualifiedClassname в нод недостаточно. Нужно переопределить inlineGraphicResolverFunction в texfFlow, т.к. стандартный не распознает имена классов. Хотя туда мне лень было копать. Решилось отслеживанием error статуса и ручной заменой source у элемента.

UPD2 TextConverter имеет неосторожность принимать опциональный config при конвертировании. Там и можно подменить inlineGraphicResolverFunction

UPD3 Готово. Собственно сама функция
Код AS3:

                private function textFlowInlineGraphicResolverFunction(value:InlineGraphicElement):* {
                        var source:* = value.source;
 
                        var result:*;
 
                        if (source is String) {
                                if ((source as String).indexOf("http") > -1) {
                                        result = source;
                                } else {
                                        try {
                                                result = getDefinitionByName(source as String);
                                        } catch (error:Error) {
                                                result = source;
                                        }
                                }
                        } else {
                                result = source;
                        }
 
                        return result;
                }


s8000_1 07.05.2010 12:26

BlooDHounD, не удалось заставить работать :(

†‡Paladin‡†, с inlineGraphicResolverFunction, пожалуй, способ получше, чем ручная замена source у всех вложенных элементов

†‡Paladin‡† 07.05.2010 12:53

Цитата:

Сообщение от s8000_1 (Сообщение 906554)
†‡Paladin‡†, с inlineGraphicResolverFunction, пожалуй, способ получше, чем ручная замена source у всех вложенных элементов

Ну оно в принципе и получается ручная замена. Однако по производительности он на голову бьет замену пост-фактум, особенного когда textFlow встраивается в резиновый layout.

s8000_1 07.05.2010 14:26

†‡Paladin‡†, не сказал бы, по крайней мере для Flex4. Layout'ы там просчитываются 1 раз, поэтому пробегаться и менять source по вложенным элементам можно сколько угодно раз. Другой вопрос, что одним циклом меньше.


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

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