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>
возможно так сделать нельзя.
тогда подскажите на какое событе повесить, чтоб рисовать После того как родитель текста добавоен в дисплей лист.
причем то на чем рисуем, еще не добавленно.
<?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>
возможно так сделать нельзя.
тогда подскажите на какое событе повесить, чтоб рисовать После того как родитель текста добавоен в дисплей лист.