Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.02.2011, 21:45
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 1  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
По умолчанию TextField#htmlText и переносы строк

Написал класс для работы с хтмл-текстом (он где тот тут на форуме уже фигурировал).
Сейчас столкнулся с такой мулькой. У меня есть в этом классе набор методов:

Вот собственно класс (поубирал лишние функции из кода, для моего вопроса этого достаточно, и работать будет, если кому скомпилировать охота)
Код AS3:
public class AdvTextField extends TextField
{
	private static const HEX:String = "0123456789ABCDEF";
 
	private var _htmlColor:String;
	private var _htmlFont:String;
	private var _htmlSize:String;
	private var _htmlAlign:String;
	//у всех этих переменных есть геттеры и сеттеры, но они без интересностей, 
	//втупую возвращают значения. В дальнейшем хочу сделать что-то попродвинутее, 
	//сейчас пока руки не дошли
 
	private var htmlStyle:HtmlStyles = new HtmlStyles();//тут по сути просто пакет шрифтов
 
	public function AdvTextField() 
	{
		super();
		embedFonts = true;
		selectable = false;
		wordWrap = true;
		multiline = true;
		width = 200;
		height = 30;
		this.antiAliasType = AntiAliasType.ADVANCED;
 
		this.setHtmlFormat("HelveticaR", 0x000000, 12);
	}
 
	override public function set text(_text:String): void {
		super.text = _text;
		refresh();
	}
 
	private function refresh():void {
		this.htmlText = '<font face="' + htmlFont + '" color="' + htmlColor + '" size="' + htmlSize +  '"><p align = "' + htmlAlign + '">' + this.text + '</p></font>';
	}
 
	public function setHtmlFormat(font:String="HelveticaR",color:uint=0x000000,size:Number=12, align:String = "left"):void {
		_htmlColor = stringARGB(color);
		_htmlFont = font;
		_htmlSize = String(size);
		_htmlAlign = align;
 
		refresh();
	}
 
	//**********************
	Ниже кому интересно посмотрит, но к вопросу это не относится.
	//**********************
	private static function getColor(num:Number):Object {
		var ob:Object = {};
 
		ob.a = num >> 24 & 0xFF;
		ob.r = num >> 16 & 0xFF;
		ob.g = num >> 8 & 0xFF;
		ob.b = num & 0xFF;
 
		return ob;
	}
 
	private static function getHex(n:Number):String {
		return HEX.charAt((n >> 4) & 0xf) + HEX.charAt(n & 0xf);
	}
 
	private static function stringARGB(num:Number):String {
		var col:Object = getColor(num);
 
		//var a:String = getHex(col.a);
		var r:String = getHex(col.r);
		var g:String = getHex(col.g);
		var b:String = getHex(col.b);
 
		return String("#" + r.concat(g, b));
	}
 
}
Вобщем в конструкторе задаются базовые параметры. Там же задается формат шрифта по-умолчанию.
Переопределен сеттер text.

Теперь если я делаю так:
Код AS3:
var text:AdvTextField = new AdvTextField();
text.setHtmlFormat("HelveticaR", 0x000000, 14, "left");
text.text = "1 абзац
2 абзац
 
4 абзац";
То в htmlText попадает следующее:
Код:
<P ALIGN="LEFT">
	<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">1 абзац</FONT>
</P>
<P ALIGN="LEFT">
	<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">2 абзац</FONT>
<P ALIGN="LEFT">
	<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0"></FONT>
</P>
<P ALIGN="LEFT">
	<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">4 абзац<FONT FACE="Times New Roman" SIZE="12"></FONT></FONT>
</P>
И это круто, этого результата я и хотел добиться. НО, если я сначала присваиваю текст, а потом уже устанавливаю формат, то всё выводится в строку:
Код AS3:
var text:AdvTextField = new AdvTextField();
text.text = "1 абзац
2 абзац
 
4 абзац";
text.setHtmlFormat("HelveticaR", 0x000000, 14, "left");
Код:
<P ALIGN="LEFT">
	<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">1 абзац2 абзац4 абзац</FONT>
</P>
<P ALIGN="LEFT">
	<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"></FONT>
</P>
Хотя поидее результат должен быть идентичен в обоих случаях. И сеттер текста и функция установки нового формата заканчиваются одной и той же функцией "refresh()".
Нипанятна. Кто может объяснить и подсказать?
__________________
Кто к нам с чем для чего - тот у нас того от того.


Последний раз редактировалось Dukobpa3; 01.02.2011 в 21:47.
Старый 02.02.2011, 01:51
  № 2  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Вот собственно класс (поубирал лишние функции из кода, для моего вопроса этого достаточно, и работать будет, если кому скомпилировать охота)
охота, но не компилится) Потому что обращение к гетерам есть (а их здесь нет). И класса HtmlStyles нет. И текст пришлось заменить на "1 абзац\n2 абзац\n\n4 абзац", ибо ругается компилятор. И package нет, и import тоже.
(..а время позднее на дворе..)
Вот ошибки исправил, а шрифта то HelveticaR у меня и нет(. А текстовое поле все равно не выводится - addChild(text) нету.
(..тик-так, тик-так..)
Цитата:
если я сначала присваиваю текст, а потом уже устанавливаю формат, то всё выводится в строку
поменяй местами установку текста и обновление в set text , чтобы вот так получилось:
Код AS3:
override public function set text(_text:String): void {
		refresh();
		super.text = _text;
}

Старый 02.02.2011, 02:20
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 3  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Этот скомпилится. Чуток поправил.
Импорт Класса-пакета шрифтов убрал, всё-равно не поможет, но переделал всё под ариал.
Во вложении.

Цитата:
"1 абзац\n2 абзац\n\n4 абзац", ибо ругается компилятор.
ну тут уж извини, я то текст не в коде присваивал, я брал из базы. Разделители там "\r". Но это роли не играет (разве что помешало тебе скомпилить быстро )

Цитата:
поменяй местами установку текста и обновление в set text , чтобы вот так получилось:
Я определенно чего-то недопонимаю....

Сейчас не готов ничего возразить или подтвердить.... Вообще хотел возразить, но не получится, ибо проверил таки. Завтра отпишусь.
Вложения
Тип файла: zip AdvTextField.zip (1.1 Кб, 22 просмотров)
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 02.02.2011, 02:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Понравились пляски с бубном вокруг цвета))
Код AS3:
private static function stringRGB(num:uint):String 
{
    var colorString:String = num.toString(16);
    while (colorString.length < 6) colorString = "0" + colorString;
    return "#" + colorString;
}
__________________
Reality.getBounds(this);

Старый 02.02.2011, 03:32
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Понравились пляски с бубном вокруг цвета))
Код AS3:
private static function stringRGB(num:uint):String 
{
    var colorString:String = num.toString(16);
    while (colorString.length < 6) colorString = "0" + colorString;
    return "#" + colorString;
}
Код AS3:
private static function stringRGB (num:uint):String {
	var colorString:String = num.toString (16);
	return ('#00000').substr (0, 7 - colorString.length) + colorString;
}
Так быстрее. Если на числе, где нулей не нужно добавлять, скорость while будет быстрее, то каждый добавляемый ноль замедляет работу и на числе с 5-ю нулями работает в 2-3 раза медленнее.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 02.02.2011 в 03:38.
Старый 02.02.2011, 03:04
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 6  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
То копипаста откуда-то))) Та и сдвиг быстрее в разы работает (хотя сомнительно конечно, что установка цвета в текстовое поле будет делаться по ентерфрейму в цикле хотя бы из сотни повторений )
Спасибо за правочку)))
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 02.02.2011, 04:02
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ага, интересный подход, спасибо))
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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