Показать сообщение отдельно
Старый 23.12.2008, 18:38
sterh вне форума Посмотреть профиль Отправить личное сообщение для sterh Найти все сообщения от sterh
  № 9  
Ответить с цитированием
sterh

Регистрация: Jul 2006
Сообщений: 10
Цитата:
Сообщение от klafuda_klalafu Посмотреть сообщение
картинка помещается ниже текста текстовое поле увеличится по горизонтали на высоту картинки, а так же зачем то по горизонтали ... то же на ширину картинки...
вот
ничего не понял

Попробуй Event.CHANGE или Event.RENDER

у меня была похожая пробла со вставкой картинок в TextField. Я решил отказаться от использования TextField и написал что-то типа мини браузера.

Вот класс, который парсит XML (можно подтачить его под HTML)
Код AS3:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.filters.*;
	import flash.text.*;
	import flash.net.*;
	import flash.text.TextField;
	import flash.events.TextEvent;
	import flash.system.fscommand;
 
	public class Page extends Sprite
	{
		var pageXMLURL:URLRequest;
		var pageXML:XML;
		var pageXMLLoader:URLLoader = new URLLoader();
 
		var Items:Array;
 
		var Parent:SScrollPane;
 
		var pStyleSheet:StyleSheet = new StyleSheet();
		var divStyleSheet:StyleSheet = new StyleSheet();
 
 
		public function Page(path, _Parent):void
		{
			Parent = _Parent;
			pageXMLURL = new URLRequest("xml/"+path);
			pageXMLLoader.load(pageXMLURL);
			pageXMLLoader.addEventListener(Event.COMPLETE, _loadCompleteHandler);
			pStyleSheet.parseCSS("a {text-decoration: underline; color: #321d02;} a:hover {color: #870505;}");
			divStyleSheet.parseCSS("a {color: #321d02;} a:hover {color: #870505;}");
		}
		private function _loadCompleteHandler(event:Event):void
		{
 
			pageXML = new XML(pageXMLLoader.data);
			pageXML.ignoreWhitespace = true;
			parcePageXML();
		}
		private function parcePageXML():void
		{
			while(this.numChildren>0)
			{
				this.removeChildAt(0);
			}
			Items = new Array();
			var blocks:XMLList = pageXML.children();
			var block:XML;
			for each(block in blocks)
			{
				var tagName:String = block.name();
				switch(tagName)
				{
					case "divs":
						var divsMc:Sprite = new Sprite();
						var divs:XMLList = block.children();
						var div:XML;
						var tempWidth:Number = 0;
						var tempY:Number = 0;
						for each(div in divs)
						{
							var tempDiv:TextField = addDiv(div);
							if(tempWidth+tempDiv.width+20 > Parent.ContWidth-40)
							{
								tempWidth = 0;
								tempY = divsMc.height+20;
							}
							tempDiv.y = tempY;
							tempDiv.x = tempWidth;
							tempWidth += tempDiv.width+20;
							divsMc.addChild(tempDiv);
						}
						if(Items.length == 0)
						{
							divsMc.y = 0;
						}
						else
						{
							divsMc.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
						}
						var divsMcId:uint = Items.push(divsMc);
						this.addChild(Items[divsMcId-1]);
					break;
					case "p":
						addP(block);
					break;
 
					case "h1":
						var h1tf:TextFormat = new TextFormat();
						h1tf.size = 24;
						h1tf.bold = false;
						h1tf.color = 0x321d02;
						//if(block.attribute("align") == "center")
						//{
							h1tf.align = TextFormatAlign.CENTER;
						//}
						var h1temp:TextField = new TextField();
						h1temp.defaultTextFormat = h1tf;
						h1temp.width = Parent.ContWidth-40;
						h1temp.wordWrap = true;
						h1temp.text = block.toString();
						h1temp.multiline = true;
						h1temp.autoSize = TextFieldAutoSize.LEFT;
						if(Items.length == 0)
						{
							h1temp.y = 0;
						}
						else
						{
							h1temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
						}
						var th1Id:uint = Items.push(h1temp);
						this.addChild(Items[th1Id-1]);
					break;
					case "h2":
						var h2tf:TextFormat = new TextFormat();
						h2tf.size = 16;
						h2tf.bold = true;
						h2tf.color = 0x321d02;
						var h2temp:TextField = new TextField();
						h2temp.defaultTextFormat = h2tf;
						h2temp.width = Parent.ContWidth-40;
						h2temp.wordWrap = true;
						h2temp.text = block.toString();
						h2temp.multiline = true;
						h2temp.autoSize = TextFieldAutoSize.LEFT;
						if(Items.length == 0)
						{
							h2temp.y = 0;
						}
						else
						{
							h2temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
						}
						var th2Id:uint = Items.push(h2temp);
						this.addChild(Items[th2Id-1]);
					break;
					case "image":
						var img:Image = new Image(block.attribute("src"), block.attribute("href"), block.attribute("big"), block.attribute("width"), block.attribute("height"));
						if(Items.length == 0)
						{
							img.y = 0;
						}
						else
						{
							img.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
						}
						//if(block.attribute("align") == "center")
						//{
							img.x = (Parent.ContWidth-40)/2-img.width/2;
						//}
						var timgId:uint = Items.push(img);
						this.addChild(Items[timgId-1]);
					break;
					case "title":
						var cc:ContentContainer;
						cc = Parent.Parent;
						cc.Title.text = block.toString();
					break;
				}
				Parent.ssb.render(Parent.Height);
			}
		}
		public function render():void
		{
			parcePageXML();
		}
		private function _linkHandler(event:TextEvent):void
		{
			if (event.text.search("@")>-1)
			{
				trace(event.text);
				navigateToURL(new URLRequest("mailto:"+event.text));
				return;
			}
			if (event.text.search("f_")>-1)
			{
				var temp_txt = event.text.replace("f_","");
				fscommand("exec", temp_txt);
				trace(temp_txt);
				return;
			}
			trace("link!"+event.text);
			Parent.addPage(event.text);
 
		}
		public function addP(block):void
		{
			var tf:TextFormat = new TextFormat();
			tf.size = 17;
			tf.font = "Arial";
			tf.color = 0x321d02;
			tf.align = TextFormatAlign.JUSTIFY;
 
			var temp:TextField = new TextField();
			temp.addEventListener(TextEvent.LINK, _linkHandler);
			temp.defaultTextFormat = tf;
			temp.width = Parent.ContWidth-40;
			temp.wordWrap = true;
			temp.styleSheet = pStyleSheet;
			var tempStr:String = new String(block.toString());
			tempStr = transformTextP(tempStr);
			temp.htmlText = tempStr;
			temp.multiline = true;
			temp.autoSize = TextFieldAutoSize.LEFT;
			if(Items.length == 0)
			{
				temp.y = 0;
			}
			else
			{
				temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
			}
			var tId:uint = Items.push(temp);
			this.addChild(Items[tId-1]);
		}
		public function addDiv(block):TextField
		{
			var tf:TextFormat = new TextFormat();
			tf.size = 14;
			tf.font = "Arial";
			tf.color = 0x321d02;
 
			var temp:TextField = new TextField();
			temp.addEventListener(TextEvent.LINK, _linkHandler);
			temp.defaultTextFormat = tf;
			//temp.width = Parent.ContWidth-40;
			temp.wordWrap = true;
			temp.styleSheet = divStyleSheet;
			var tempStr:String = new String(block.toString());
			tempStr = transformTextP(tempStr);
			temp.htmlText = tempStr;
			temp.multiline = true;
			temp.autoSize = TextFieldAutoSize.LEFT;
			temp.wordWrap = false;
			return temp;
			/*if(Items.length == 0)
			{
				temp.y = 0;
			}
			else
			{
				temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
			}
			var tId:uint = Items.push(temp);
			this.addChild(Items[tId-1]);*/
		}
		private function transformTextP(tempStr):String
		{
			while(tempStr.search("\n")>=0)
			{
				tempStr = tempStr.replace("\n","");
			}
			while(tempStr.search("  ")>=0)
			{
				tempStr = tempStr.replace("  "," ");
			}
			tempStr = tempStr.replace("> ",">");
			while(tempStr.search("> ,")>=0)
			{
				tempStr = tempStr.replace("> ,",">,");
				trace("SUKAAAAA!");
			}
			while(tempStr.search("> <")>=0)
			{
				tempStr = tempStr.replace("> <","><");
			}
			while(tempStr.search("<br/> ")>=0)
			{
				tempStr = tempStr.replace("<br/> ","\n");
			}
			while(tempStr.search("<br/>")>=0)
			{
				tempStr = tempStr.replace("<br/>","\n");
			}
			while(tempStr.search("<tab /> ")>=0)
			{
				tempStr = tempStr.replace("<tab /> ","\t");
			}
			while(tempStr.search("\"> ")>=0)
			{
				tempStr = tempStr.replace("\"> ","\">");
			}
			while(tempStr.search("« <")>=0)
			{
				tempStr = tempStr.replace("« <","«<");
			}
			while(tempStr.search("> »")>=0)
			{
				tempStr = tempStr.replace("> »",">»");
			}
			return tempStr;
		}
	}
}