Показать сообщение отдельно
Старый 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.