Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Смайлики с помощью тега <img> в одной строке типа "Текст смайл текст" (http://www.flasher.ru/forum/showthread.php?t=177776)

SuperMegaMax 08.04.2012 13:57

Смайлики с помощью тега <img> в одной строке типа "Текст смайл текст"
 
Пишу чат. Точнее уже написал :) На сокетах. Сервер на C++ и клиент на flash AS3. С текстом всё нормально! Решил добавить смайлики! Ну и решил протестировать. Для тестирования просто написал строку, чтоб убедиться, всё-ли правильно!
Добавил в библиотеку смайлик, указал в свойства "Экспорт для ActionScript" и дал имя smile1.

И написал так:

Код AS3:

text_txt.htmlText = "текст текст текст <img src = 'smile1'/> текст текст текст";

Но всё прошло, не так, как я думал.

Сначала появился весь текст, а потом под ним смайлик! Как решить проблему "Текст смайл текст"?
Помогите!

Rzer 08.04.2012 14:02

getCharBoundaries и по эти координатам позиционировать спрайт со смайликом.

SuperMegaMax 08.04.2012 14:08

Тоесть:

Код AS3:

var a:int = text_txt.getCharBoundaries(":)");

Так что-ли?

Добавлено через 32 секунды
Не помогло! Покажи, как его применять.

Rzer 08.04.2012 14:12

http://help.adobe.com/en_US/FlashPla...harBoundaries()

SuperMegaMax 08.04.2012 14:15

Так там всё по английский :)

MikroAcse 08.04.2012 14:20

Цитата:

Так там всё по английский
Чтобы быть программистом, надо знать английский.

Но вот на русском есть :)
http://help.adobe.com/ru_RU/FlashPla...arBoundaries()

Rzer 08.04.2012 14:20

английский будет полегче программирования ;) Может стоит с него начать? Смотри тип, который возвращает функция (Rectangle) и параметр, который в неё передаётся (индекс символа, который например можно получить так: var anIndex:int = tf.text.indexOf("*facepalm*"); )

SuperMegaMax 08.04.2012 14:20

Добавлено через 1 минуту
Вроде понял! Но ведь координаты x и y, и нужны две переменные для координат! Разве не так? :)

Добавлено через 2 минуты
Я имею ввиду, что getCharBoundaries будет возвращать координаты x и y

Добавлено через 6 минут
И изначально, я ведь не знаю, сколько будет смайликов в тексте! А если их вообще не будет? То тогда
Код AS3:

var anIndex:int = tf.text.indexOf("*facepalm*");

будет ненужным. Можно-ли с помощью например if проверить, есть ли смайлик в строке или нету?

Добавлено через 9 минут
Ау! Ты тут?

MikroAcse 08.04.2012 14:33

Так пройдись по всему тексту и найди все "*facepalm*".


Цитата:

Но ведь координаты x и y, и нужны две переменные для координат! Разве не так?
rectangle.x и rectangle.y
Цитата:

Смотри тип, который возвращает функция (Rectangle)

SuperMegaMax 08.04.2012 14:36

Извеняюсь, но

Код AS3:

var anIndex:int = text_txt.text.indexOf(":)");

Почемуто всё-время мне выдаёт одно и тоже, где-бы не стоял смайлик.

Цитата:

Так пройдись по всему тексту и найди все "*facepalm*".
А как по нему пройтись? Может не подскажешь?

Добавлено через 20 минут
Ау! Вы тут?

Inet_PC 08.04.2012 17:56

Цитата:

А как по нему пройтись?
У метода indexOf есть еще и второй (необязательный) параметр, индекс с к. нужно начинать поиск. Если в него передать индекс предыдущего вхождения (+1 кажись), то поиск пойдет дальше (продолжится, если можно так сказать).

kelod 09.04.2012 16:54

getCharBoundaries работает хорошо если TextField.text, а если TextField.htmlText???

у меня вот такой код отказывается работать
Код AS3:

txtS.htmlText = '<FONT SIZE="14" >*101</FONT>';
                                var str:TextField = new TextField();
                                str.text = 'павр *101 по';
                                var Ix:int = str.text.indexOf('*');
                                var Iy:int = txtS.htmlText.indexOf('*');
                                var fx:Rectangle = str.getCharBoundaries(Ix);
                                var fy:Rectangle = txtS.getCharBoundaries(Iy);
 
                                trace (Ix,' ',Iy);
                                trace (fx,' ',fy);

Добавлено через 39 секунд
верней он не отказываеться, но значение fy null

Wolsh 09.04.2012 17:40

Зачем Вам html то? Он же не отображается. То, что отображается, это text.

Добавлено через 6 минут
С большой буквы пишутся имена классов и интерфейсов.

kelod 09.04.2012 18:47

как мне без html ссылки выводить, картинки?
конечно можно выделить отдельно отображаемый текст и обработать, но как узнать тогда координату y?

Wolsh 09.04.2012 20:25

Вы спрашиваете индекс символа "*" в строке "<FONT SIZE="14" >*101</FONT>"
Какой индекс? 17?
Затем Вы спрашиваете у текстфилда координаты семнадцатого символа.
У текстфилда, в котором написано "*101".
Какого ректангла Вы ждете, кроме как null?

Dukobpa3 09.04.2012 20:50

А сам чат хоть как-то уже работает?
Уже несколько тем от автора и все с одними и теми же вопросами.

Как видео вставить, как смайл вставить. Может таки как-то по нарастающей двигаться? Сразу запустить просто текст, потом что-то следующее потом еще.

Я это к тому что если бы предыдущие темы были уже обработаны автором, то часть вопросов отпала бы сама собой. А так складывается впечатление что просто поговорить.

Добавлено через 6 минут
Цитата:

но как узнать тогда координату y?
TextField#getCharBoundaries()
Для начала справку почитать.
Зачем вам координаты неотображаемых символов? Они же не отображаются, их не видно.

kelod 09.04.2012 21:00

Wolsh ага т.е. getCharBoundaries работает только с видимым, ясно, а как же быть если текст многострочный?

Dukobpa3 вообще-то я и двигаюсь по нарастающей, то о чём я до этого спрашивал работает, нууу кроме видео, это я решил пока на потом отложить, чат в принцепи готов, остались доработки

Dukobpa3 09.04.2012 21:29

Какая разница сколько строк, эта функция работает просто с картинкой текстфилда.

kelod 09.04.2012 21:53

я понял про функцию, у меня в другом вопрос у меня же получиться html текст с кучей тегов и некоторые пробулы и переносы коретки, как с ними быть?

Dukobpa3 09.04.2012 21:55

фейспалм.жпг

Это всё учтется функцией которая выдает ректангл области. Отдельно уделять этому внимание не нужно.

kelod 09.04.2012 22:09

фейспалм.жпг - это что?

MikroAcse 09.04.2012 22:34

Цитата:

фейспалм.жпг
О боги...

kelod 09.04.2012 22:47

Dukobpa3 дело то в том что в getCharBoundaries передаётся не символ а его индекс, если бы символ то и проблем не было

Dukobpa3 09.04.2012 22:51

Код AS3:

var Iy:int = txtS.htmlText.indexOf('*');

потому что индекс надо брать не из хтмлтекста а из текста. Или к чему вообще была пачка сообщений о невидимых символах?

Добавлено через 1 минуту
Wolsh сразу же об этом и сказал, а дальше пошло разжевывание.

Wolsh 09.04.2012 23:17

Я на самом деле извиняюсь, что не смог адекватно оценить, насколько Вам это все может быть непонятно.
У ТекстФилда есть два свойства - htmlText и просто text.
Первое включает всю разметку для текста, или "теги".
Второе содержит только отображаемый текст.
Все символы, отображаемые в текстфилде, для текстфилда отдельные визуальные элементы, как картинки в галерее. составленные по-порядку в строки. У визуальных элементов естественно есть ширина, высота и координаты в поле текстфилда. То есть ректангл.
У тегов разметки естественно нет никаких координат и размеров, потому что они не отображаются в текстфилде.
Таким образом, Вы отдаете текст для отображения вместе с разметкой как htmlText, но при поиске координат Вам надо указать индекс символа без учета тегов разметки, индекс символа как он отображается в поле. То есть его индекс в строке свойства text.
Код AS3:

txtS.htmlText = '<FONT FACE="Times New Roman" SIZE="14" >*101</FONT>';
var Iy:int = txtS.text.indexOf('*');


kelod 09.04.2012 23:23

Dukobpa3 после этого получаем индекс с учётом тегов, т.е. дальше чем есть текст, вы что думаете я совсем тупой?? я многого не знаю, это правда, я ленивый, но не тупой

вот есть две строки

txtS.htmlText = '<FONT FACE="Times New Roman" SIZE="14" >*101</FONT>';
и
txtS1.htmlText = '*101';

var i:int = txtS.htmlText.indexOf('*'); это вернёт 17
var i1:int = txtS1.htmlText.indexOf('*'); это вернёт 0
и как мне рисовать прямоугольник если результат 17 а должен быть ноль????

Dukobpa3 09.04.2012 23:41

если хтмл тексту присвоить вот эту строку:
Код AS3:

txtS.htmlText = '<FONT FACE="Times New Roman" SIZE="14" >*101</FONT>';

То автоматом в строке текста окажется вот эта:
Код AS3:

txtS1.text == '*101'; // true

поэтому мы делаем:
Код AS3:

var index:int = txtS.text.indexOf('*');

И получаем искомый прямоугольник вне зависимости от того что мы там за стопицот тегов всунули в хтмлтекст.

Теперь понятно?

kelod 09.04.2012 23:43

спасибо таперь понятно)


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

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