PDA

Просмотр полной версии : Как узнать ширину текста ДО добавления родительского елемента.


redbaron
27.09.2006, 12:34
задача такая нарисовать цену с надстрочными копейками.
причем то на чем рисуем, еще не добавленно.



<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.containers.Canvas;
import mx.controls.Text;

private var fontsize:Number=24;
private var fontcolor:Number=0xFF0000;

function drawIt(paper:String,coins:String){


var _canvas:Canvas=new Canvas();

var textChild:Text=new Text();
textChild.text=paper;
textChild.setStyle("fontSize",fontsize);
textChild.setStyle("color",fontcolor);

textChild.validateNow();
var paperTextWidth:Number=textChild.textWidth;
tracelog("After text create - paperTextWidth="+paperTextWidth);

_canvas.addChild(textChild);

textChild.validateNow();
paperTextWidth=textChild.textWidth;
tracelog("After text add - paperTextWidth="+paperTextWidth);




_canvas.validateNow();
paperTextWidth=textChild.textWidth;
tracelog("After validate canvas - paperTextWidth="+paperTextWidth);


var lm:TextLineMetrics=textChild.getLineMetrics(0);

tracelog("After validate canvas - TextLineMetrics.width="+lm.width);

// здесь нам бы уже надо знать paperTextWidth

if(""!=coins){
var coinsChild:Text=new Text();

coinsChild.x=textChild.x+paperTextWidth;

coinsChild.text=coins;
coinsChild.y=textChild.y +(textChild.height*0.4);
coinsChild.setStyle("fontFamily",textChild.getStyle("fontFamily"));
coinsChild.setStyle("color",textChild.getStyle("color"));
coinsChild.setStyle("fontSize",textChild.getStyle("fontSize")*0.6);
_canvas.addChild(coinsChild);
}

_canvas.width=202;
_canvas.height=323;
_canvas.x=52;
_canvas.y=74;
addChild(_canvas);

textChild.validateNow();
paperTextWidth=textChild.textWidth;
tracelog("After add canvas - paperTextWidth="+paperTextWidth);


}
private function tracelog(s:String){
log.text+="\n"+s;
}


]]>
</mx:Script>

<mx:TextArea x="303" y="74" width="190" height="323" id="log"/>
<mx:TextInput x="52" y="419" width="46" id="paper" text="737" />
<mx:TextInput x="106" y="419" width="46" id="coins" text="99"/>
<mx:Label x="97" y="418" text="." fontFamily="Arial" fontWeight="bold" fontSize="22"/>
<mx:Button x="189" y="419" label="draw" click="drawIt(paper.text,coins.text)"/>
</mx:Application>


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