<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3499527377501170391</id><updated>2012-02-16T10:37:23.946+02:00</updated><category term='text layout framework'/><category term='itemrenderer columnchart custom charting'/><category term='tabbar hand cursor flex 3'/><title type='text'>Platus Talks Flex</title><subtitle type='html'>I platus, I talk Flex</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-3471253855731411010</id><published>2010-12-20T12:50:00.000+02:00</published><updated>2010-12-20T12:50:24.189+02:00</updated><title type='text'>Announcement</title><content type='html'>Too &amp;nbsp;many blogs are closed unannounced, so&amp;nbsp;I would like to announce that I will not be updating this blog anytime soon.&lt;br /&gt;&lt;br /&gt;In the mean time, check out&amp;nbsp;&lt;a href="http://homedermaroller.blogspot.com/"&gt;my new project&lt;/a&gt;&amp;nbsp;(especially if you're a female).&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5gW7pVWB8ho/TQ80lHcjLAI/AAAAAAAAAF0/QgNX-niNosY/s1600/guinea-pig-9.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="293" src="http://3.bp.blogspot.com/_5gW7pVWB8ho/TQ80lHcjLAI/AAAAAAAAAF0/QgNX-niNosY/s320/guinea-pig-9.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Guinea Pig&lt;/b&gt;: &lt;br /&gt;My new project requires you to be one&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-3471253855731411010?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/3471253855731411010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/12/announcement.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/3471253855731411010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/3471253855731411010'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/12/announcement.html' title='Announcement'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5gW7pVWB8ho/TQ80lHcjLAI/AAAAAAAAAF0/QgNX-niNosY/s72-c/guinea-pig-9.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-985747340876613694</id><published>2010-10-05T18:17:00.009+02:00</published><updated>2010-10-05T18:30:04.406+02:00</updated><title type='text'>DateChooser with Months Combobox</title><content type='html'>&lt;div height="200" style="border-color: rgb(0, 0, 0); border-style: solid;"&gt;&lt;object height="200" width="100%"&gt; &lt;param name="movie" value="tlf_example.swf"&gt;&lt;embed src="http://sites.google.com/site/platustalksflex/MonthComboExample.swf" width="100%" height="200"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Left field is the Flex's default DateField.&lt;br /&gt;On the right is my extended DateField (and extended DateChooser) - both together add the following features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A combobox for changing the selected month.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A nice gray background to the days-of-week row (&lt;b&gt;S M T W T F S&lt;/b&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The # of typed characters is limited to 10 (the maximum for the default &lt;i&gt;mm/dd/yyyy&lt;/i&gt; format)&lt;/li&gt;&lt;/ul&gt;Source files:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/platustalksflex/EditableDateField.as"&gt;EditableDateField.as&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/platustalksflex/ModifiedDateChooser.as"&gt;ModifiedDateChooser.as&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll add some explanations later...&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-985747340876613694?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/985747340876613694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/10/datechooser-with-months-combobox.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/985747340876613694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/985747340876613694'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/10/datechooser-with-months-combobox.html' title='DateChooser with Months Combobox'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-3788476691161233763</id><published>2010-09-21T15:05:00.005+02:00</published><updated>2010-10-31T18:23:31.231+02:00</updated><title type='text'>Migrating Flex 3 to Flex 4 pitfalls</title><content type='html'>It should be fairly easy to compile a project written in Flex 3 in the new Flash Builder 4. However, there are a few pitfalls that I encountered and you may encounter too.&lt;br /&gt;&lt;br /&gt;So here they are, plus the solutions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Before you begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make sure you are using the &lt;b&gt;latest &lt;/b&gt;SDK (currently 4.1)&lt;/li&gt;&lt;li&gt;Copy all your old source file, you don't want to ruin them just yet...&amp;nbsp; &lt;br /&gt;Create a new project, you will copy most of your old application mxml code there.&lt;/li&gt;&lt;li&gt;In Project Properties. Select Flex Compiler on the left, and in "additional compiler arguments" add -theme=${flexlib}/themes/Halo/halo.swc.&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;This will make your application look more or less like it used to when it was under Flex 3 which used the default Halo theme. Of course, if you used a different theme, include &lt;b&gt;that&lt;/b&gt; theme instead&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&amp;lt;mx:Application&amp;gt; is now &amp;lt;s:Application&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&amp;lt;mx:Style&amp;gt; is now &amp;lt;fx:Style&amp;gt;, &amp;nbsp; &amp;lt;mx:Script&amp;gt; is now &amp;lt;fx:Script&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Copy your main application mxml and change it.&lt;br /&gt;In the application tag these namespace attributes should now be:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:s="library://ns.adobe.com/flex/spark" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:mx="library://ns.adobe.com/flex/mx"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Change &amp;lt;mx:Script&amp;gt; to &amp;lt;fx:Script&amp;gt; on that file, too, and &amp;lt;mx:Style&amp;gt; to &amp;lt;fx:Style&amp;gt;.&lt;br /&gt;For now, you don't have to do it in ALL your project files, just in the main application mxml.&lt;br /&gt;&lt;br /&gt;If you have global style references, for example you are styling Button in all of your application, you should prefix it with the proper namespace. That is, because Flex 4 has its own button component with the same name.&lt;br /&gt;So, if you wanna style only your Halo buttons, include in your &amp;lt;fx:Style&amp;gt; tag:&lt;br /&gt;&lt;pre&gt;@namespace mx "library://ns.adobe.com/flex/halo";&amp;nbsp;&lt;/pre&gt;and change button to&lt;br /&gt;&lt;pre&gt;mx|Button&lt;/pre&gt;&lt;pre&gt;{&lt;br /&gt;   color:#ffffff&lt;/pre&gt;&lt;pre&gt;};&amp;nbsp;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;If you are going to add spark buttons later and want to style them globally too, you will add something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@namespace s "library://ns.adobe.com/flex/spark";&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;s|Button&lt;/pre&gt;&lt;pre&gt;{&lt;br /&gt;   color:#ffffff&lt;/pre&gt;&lt;pre&gt;};&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Application.application is obsolete&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Flex 4, you can no longer use Application.application to reference your application. Instead, you now need to use FlexGlobals.topLevelApplication.&lt;br /&gt;&lt;br /&gt;Luckily, in one of the latest Flex SDK 4 builds this is transparent to you as Application.as contains a property called "application" which simply returns FlexGlobals.topLevelApplication.&lt;br /&gt;&lt;br /&gt;So you shouldn't need to change your code (especially if you have this reference all over your code, like I do).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Application.addChild() WILL fail&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you try to add an &lt;b&gt;mx&lt;/b&gt; container or component to the application itself, it will no longer work with addChild. So use addElement() instead.&lt;br /&gt;I won't explain here why, but addElement will actually create and add a proper spark container for you and add your component to &lt;b&gt;it&lt;/b&gt;.&lt;br /&gt;If you want to dig deeper on this check out &lt;a href="http://frishy.blogspot.com/2010/02/when-to-use-what-spark-container.html"&gt;this &lt;/a&gt;post (&lt;b&gt;Update&lt;/b&gt;: Actually,&lt;a href="http://www.billdwhite.com/wordpress/?p=296"&gt;&amp;nbsp;this post&lt;/a&gt;&amp;nbsp;explains this issue).&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;backgroundImage for Application is no longer supported&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you used backgroundImage in your old application, you will notice that it's no longer accepted. You will need to use a skin for your application instead Here's &lt;a href="http://blog.flexexamples.com/2009/03/22/setting-a-background-image-on-an-fxapplication-in-flex-gumbo/"&gt;how&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;"The style '___________' is excluded by type 'mx.containers._________'."&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you get this compiler error message it means you fucked up a style in Flex 3, but the old compiler looked the other way - whereas Flex 4 doesn't.&lt;br /&gt;For example I had this piece of code in my project for some reason:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;mx:Canvas paddingLeft="0"&lt;/div&gt;It took me a few seconds to realize that Canvas doesn't even support padding (it's excluded from the class, as you can see in the class's code).&lt;br /&gt;&lt;br /&gt;So just delete these non-existing styles and these errors will be cleared.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Runtime Error in FocusManger:childHideHandler()&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once I got my app up and running, it wasn't the end of it. On certain scenarios I would get this runtime error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;TypeError: Error #1009: Cannot access a property or method of a null object reference. &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at mx.managers::FocusManager/childHideHandler()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\FocusManager.as:1759] &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at flash.events::EventDispatcher/dispatchEventFunction() &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at flash.events::EventDispatcher/dispatchEvent() &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at mx.core::UIComponent/dispatchEvent()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:12528] &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at mx.core::UIComponent/setVisible()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:3088] &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  at mx.core::UIComponent/set visible()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:3047]&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, this actually turns out to be a &lt;a href="http://bugs.adobe.com/jira/browse/SDK-26273"&gt;known bug&lt;/a&gt; introduced in SDK 4.1, and apparently it was only fixed in Flex SDK 4.5! &lt;br /&gt;&lt;br /&gt;The bug is caused when the focus is set on a component which goes invisible. There are a few alleged workarounds (I tried one or two, but they didn't  work in my case).&lt;br /&gt;&lt;br /&gt;One suggestion is to override the event listener for HIDE and invoke &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;event.stopImmediatePropagation()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If that doesn't work, check out this forum &lt;a href="http://forums.adobe.com/message/2741467#2741467"&gt;thread&lt;/a&gt; for a possible solution.&lt;br /&gt;&lt;br /&gt;Personally, the course of action I took was simply to download 4.5 and use it (I wasn't happy about it, though. I think Adobe should have fixed this back in 4.1. It's &lt;i&gt;not &lt;/i&gt;a minor bug).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;mx:GridLines's direction property is obsolete&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Property is now named "gridDirection" :@&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-3788476691161233763?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/3788476691161233763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/09/migrating-flex-3-to-flex-4-pitfalls.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/3788476691161233763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/3788476691161233763'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/09/migrating-flex-3-to-flex-4-pitfalls.html' title='Migrating Flex 3 to Flex 4 pitfalls'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-2566176488205417420</id><published>2010-09-15T11:04:00.003+02:00</published><updated>2010-09-15T16:56:05.326+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tabbar hand cursor flex 3'/><title type='text'>TabBar buttons with hand cursor (Flex 3)</title><content type='html'>It's a small thing really, but I haven't seen it posted anywhere, so I thought I'd share.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PROBLEM: &lt;/b&gt;&lt;br /&gt;You have a TabBar and you may want a hand cursor on mouseover of unselected tabs (the currently selected tab should keep showing a regular arrow cursor).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SOLUTION:&lt;/b&gt;&lt;br /&gt;Extend TabBar, and - &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #3d85c6;"&gt;&lt;span style="color: black;"&gt;Override&lt;/span&gt; resetNavItems()&lt;/span&gt; - adding a loop that also sets a hand cursor on all buttons.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: #3d85c6;"&gt;&lt;span style="color: black;"&gt;Override&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #3d85c6;"&gt;hiliteSelectedNavItem()&lt;/span&gt;&amp;nbsp; - reset the cursor to a hand cursor on the currently selected tab. Select the new tab (by calling super.hiliteSelectedNavItem) and then clear the hand cursor from that tab.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Override &lt;span style="color: #3d85c6;"&gt;public get dataProvider()&lt;/span&gt; just adding a call to hiliteSelectedNavItem(selectedIndex).&lt;br /&gt;The reason for that is that those other two methods are only called as a response to user interaction (clicking on tabs). We want to set the cursors as soon as the tabs are created, assuming the first tab is selected.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'm pretty sure it's not the most efficient way of doing it, but hey - it works. &lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;Source code &lt;a href="https://sites.google.com/site/platustalksflex/HandCursorTabBar.as"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-2566176488205417420?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/2566176488205417420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/09/tabbar-buttons-with-hand-cursor-flex-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/2566176488205417420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/2566176488205417420'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/09/tabbar-buttons-with-hand-cursor-flex-3.html' title='TabBar buttons with hand cursor (Flex 3)'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-1916427969045329462</id><published>2010-08-26T10:19:00.005+03:00</published><updated>2010-09-04T03:16:34.571+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='text layout framework'/><title type='text'>Text Layout Framework basics - Part 2</title><content type='html'>It's always better to explain stuff by showing a real-life example. The sample application we'll create in this part of the tutorial is actually a continuation of what we already did in Part 1, except:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5gW7pVWB8ho/THY5bCclUyI/AAAAAAAAAD4/QeCiLQ37_cY/s1600/tlf_app_sc.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://2.bp.blogspot.com/_5gW7pVWB8ho/THY5bCclUyI/AAAAAAAAAD4/QeCiLQ37_cY/s640/tlf_app_sc.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;This time we will use TLF classes for the most part.&lt;/li&gt;&lt;li&gt;When the user resizes the application, we want our textflow to automatically adjust to the new size and redraw, and this includes re-positioning the inline dropdownlist.&lt;br /&gt;(Unfortunately, you can't see this in the app below, you'll need to open it in a new window and resize it to see it in work. A direct link can be found &lt;a href="http://sites.google.com/site/platustalksflex/tlf_example.swf"&gt;here&lt;/a&gt;.)&lt;/li&gt;&lt;li&gt;We will add some interactivity to the text - namely - show tool-tips on some of the words (on mouse roll over). &lt;/li&gt;&lt;/ol&gt;&lt;div style="border-color: rgb(0, 0, 0); border-style: solid;"&gt;&lt;object height="150" width="100%"&gt; &lt;param name="movie" value="tlf_example.swf"&gt;&lt;embed src="http://sites.google.com/site/platustalksflex/tlf_example.swf" width="100%" height="150"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the first part we saw how to use the Flash Text Engine classes for basic text rendering. We created a TextBlock from several ContentElements, and then used the TextBlock's createTextLine() method to &lt;b&gt;manually&lt;/b&gt; create and position the actual (visual) lines inside a container.&lt;br /&gt;&lt;br /&gt;Now, it would be very weary to have to do this for &lt;i&gt;every piece of text &lt;/i&gt;that we wanted to display in our application...&lt;br /&gt;&lt;br /&gt;This is where the &lt;b&gt;TLF &lt;/b&gt;classes come in handy: Instead of having to do these calculations by ourselves, we can simply link a textblock (the term in TLF is now TextFlow) to a container, leaving it up to Flex to handle the positioning (also called "composition"). This means, for example, that if the container is resized for some reason - it is now possible to automatically relayout the text accordingly to still fit inside it the best it can.&lt;br /&gt;&lt;br /&gt;As usual, let's get ourselves familiar with the main packages in this framework first: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;flashx.textLayout.elements&lt;/b&gt;&lt;br /&gt;Contains the core classes used for representing text content in the Text Layout Framework. This are essentially the same "building blocks" we saw in Part 1, only now they have slightly different names, for example you can say that GroupElement is now called ParagraphElement; Instead of TextBlock, we use TextFlow etc.. &lt;br /&gt;All of these elements (like SpanElement, ParagraphElement etc) are FlowElements.&lt;br /&gt;If they are &lt;b&gt;grouping&lt;/b&gt; elements (meaning that they can contain other elements) they will also inherit from FlowGroupElement.&lt;br /&gt;But if they're simple elements like text and graphic then they're considered a leaf in the textflow tree, so they will be inherited from FlowLeafElement. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;flashx.textLayout.compose&lt;/b&gt; - contains the classes used for breaking text into lines, and arranging lines in containers.&lt;br /&gt;&lt;br /&gt;There aren't many classes in this package. For a basic composition you will most likely use StandardFlowComposer.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;flashx.textLayout.container&lt;/b&gt; -&amp;nbsp; contains classes for displaying text in the Text Layout Framework. &lt;br /&gt;&lt;br /&gt;In this chapter we will use the fundamental&amp;nbsp; ContainerController which defines the relationship between a TextFlow object and a container.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;flashx.textLayout.events&lt;/b&gt; - contains event classes for the Text Layout Framework. &lt;br /&gt;The main events are: CompositionCompleteEvent, UpdateCompleteEvent,&amp;nbsp; and FlowElementMouseEvent. We will see them in use later on this chapter.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Now let's see how we can use all that in our sample application:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating the Text Flow&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;TextFlow &lt;/span&gt;is the most basic class here... It contains all of our text (or "story") in the form of a hierarchical tree of elements. A TextFlow can, for example, look like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5gW7pVWB8ho/THUAP5o3zGI/AAAAAAAAADw/nhkd86LOnbE/s1600/tftree.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://2.bp.blogspot.com/_5gW7pVWB8ho/THUAP5o3zGI/AAAAAAAAADw/nhkd86LOnbE/s400/tftree.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In this example our story contains two elements: a paragraph and a div element. That div by itself contains two other elements - another div and another paragraph. And &lt;i&gt;That&lt;/i&gt; paragraph consists of a &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;SpanElement&lt;/span&gt;, some graphics, a &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;linkElement &lt;/span&gt;and so on...&lt;br /&gt;&lt;br /&gt;The reason that this "tree" form is important is because it allows us to automatically apply any style that we give to a container element - to &lt;i&gt;all of its descendants.&lt;/i&gt;&amp;nbsp; For example, if I set my root textflow with a textcolor of green, then &lt;b&gt;all of my text &lt;/b&gt;(in all the containing paragraphs, and THEIR children,&amp;nbsp; etc.) will be green too, unless I change the color explicitly on one of the descendants...&lt;br /&gt;&lt;br /&gt;One way to create a TextFlow is to import it from an HTML-like text, as this small example shows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;private static const textInput:XML = &amp;lt;TextFlow xmlns="http://ns.adobe.com/textLayout/2008"&amp;gt;&lt;br /&gt; &amp;lt;div&amp;gt;&lt;br /&gt; &amp;lt;p color="0x336699"&amp;gt;&amp;lt;span&amp;gt;The Text Layout Framework is an extensible library, built on the new text engine in Adobe Flash Player 10, which delivers advanced, easy-to-integrate typographic and text layout features for rich, sophisticated and innovative typography on the web.&lt;br /&gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/TextFlow&amp;gt;;&lt;br /&gt;&lt;br /&gt;private var _textFlow:TextFlow;&lt;br /&gt;var importer:ITextImporter = TextConverter.getImporter(TextConverter.TEXT_LAYOUT_FORMAT);&lt;br /&gt;textFlow = importer.importToFlow(textInput);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In our sample application, however, I don't want to import the text, so for now I'll just create an empty textflow and link it with my container the way TLF allows me to:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;_textFlow = new TextFlow();&lt;br /&gt;_textFlow.flowComposer.addController(new ContainerController(container, width - PARA_PADDING, height - PARA_PADDING));    &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that to the FlowComposer of a textflow I only add a single controller, and that's because I only have one container in my application. If I wanted my text to run over multiple containers for some reason, then I would have to add more controllers, so that there will be one for each container.&lt;br /&gt;&lt;pre class="Java" name="code"&gt;var p:ParagraphElement = new ParagraphElement();&lt;br /&gt;p.fontSize = 16;&lt;br /&gt;p.linkNormalFormat = [{color:0x0000aa}];&lt;br /&gt;&lt;br /&gt;// -- some code to add SpanElements (one for each word) to the Paragraph goes here&lt;br /&gt;//    and some LinkElements as well --&lt;br /&gt;&lt;br /&gt;_textFlow.addChild(p); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here I create a new paragraph, and set some of its styles. Pretty straightforward.&lt;br /&gt;In the sample application I break a string with a space character as a delimiter, and add each word as a separate SpanElement to the paragraph.&lt;br /&gt;For the two words I need tooltips for, however, I must create LinkElements, because they are the only text elements that can interact with the mouse!&lt;br /&gt;&lt;br /&gt;The next lines tells my textflow that the the only thing the user can do with it is select text from it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;_textFlow.interactionManager = new SelectionManager(); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If I wanted the user to be able to also edit the text, etc, I would replace &lt;span style="background-color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;SelectionManager &lt;/span&gt;with &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;EditManager &lt;/span&gt;and so on.&lt;br /&gt;&lt;br /&gt;Great. now let's listen to roll over and roll out events from our textflow:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;_textFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, onRollOver);&lt;br /&gt;_textFlow.addEventListener(FlowElementMouseEvent.ROLL_OUT, onRollOut);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Remember, they will trigger only for LinkElements.&lt;br /&gt;&lt;br /&gt;OK, we're done composing our textflow.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;The UPDATE_COMPLETE event&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You might remember that in my previous inline uicomponent example application this is the point where we positioned our DropDownList. Now this position is no longer static, it can potentially change if the user resizes the application etc, so we can't do that here anymore. Instead, we'll listen to the UPDATE_COMPLETE event and do it there.&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;_textFlow.addEventListener(UpdateCompleteEvent.UPDATE_COMPLETE, repositionCombobox, false, 0, true);&lt;br /&gt;_textFlow.flowComposer.updateAllControllers(); // update the display&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;updateAllControllers() &lt;/span&gt;is important, as it composes the content of the root element and updates the display immediately. It also triggers the UPDATE_COMPLETE event for the first time which we need in order to initially position our DropdownList.&lt;br /&gt;&lt;br /&gt;The code for positioning the dropdownlist is a bit different with the TLF, it's actually easier because TextFlow now has a nice method called &lt;span style="color: #38761d;"&gt;getElementById&lt;/span&gt;. Easy to locate our place holder InlineGraphicElement and move our dropdownlist on top of it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;// Whenever display is updated we need to reposition the dropdownList because&lt;br /&gt;// its location in the flow could have changed&lt;br /&gt;private function repositionCombobox(event:UpdateCompleteEvent):void&lt;br /&gt;{&lt;br /&gt; // get inlinegraphicElement place holder and put combobox in its place&lt;br /&gt; var pHolder:InlineGraphicElement = _textFlow.getElementByID("b") as InlineGraphicElement;&lt;br /&gt; cb.width = pHolder.width - 20;&lt;br /&gt; cb.height = pHolder.height;&lt;br /&gt; &lt;br /&gt; // position combobox over the InlineGraphicElement&lt;br /&gt; cb.move(pHolder.graphic.localToGlobal(new Point(0,0)).x + 10, pHolder.graphic.localToGlobal(new Point(0,0)).y + 3);&lt;br /&gt; &lt;br /&gt; // add the combobox to the display list if not already added&lt;br /&gt; if (cb.parent != this)&lt;br /&gt;  addElement(cb);&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Handling resize&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;OK, now we just need to make sure that his method is called whenever the application resizes. This means two things: changing the composition size (it doesn't know to change automatically) and update the textflow display again.&lt;br /&gt;here is the resize handler function:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;private function resizeHandler():void&lt;br /&gt;{&lt;br /&gt;if (_textFlow &amp;amp;&amp;amp; _textFlow.flowComposer.getControllerAt(0))&lt;br /&gt;{     _textFlow.flowComposer.getControllerAt(0).setCompositionSize(container.width, container.height);&lt;br /&gt;     _textFlow.flowComposer.updateAllControllers();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Responding to mouse rollover events to create Tooltips&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is the only somewhat complicated code in the application. The tricky part is to figure out the position of the &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;LinkElement &lt;/span&gt;that has been rolled over, and create a tooltip just above it. &lt;br /&gt;To find out an element's position we will have to find which actual TextLine currently contains that link. Luckily, you know all about it from Part 1 of this tutorial so you shouldn't be intimidated.&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;// Handle link roll over&lt;br /&gt;private function onRollOver(event:FlowElementMouseEvent):void&lt;br /&gt;{&lt;br /&gt;if (tt)&lt;br /&gt;{    &lt;br /&gt; ToolTipManager.destroyToolTip(tt);&lt;br /&gt; tt = null;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;// Get the LinkElement that triggered the alert&lt;br /&gt;var link:LinkElement = event.flowElement as LinkElement;&lt;br /&gt; &lt;br /&gt;// Find out the link's position on screen&lt;br /&gt;var linkStart:int = link.getAbsoluteStart();&lt;br /&gt;var textFlowLine:TextFlowLine = link.getTextFlow().flowComposer.findLineAtPosition(linkStart);                &lt;br /&gt;var lineStart:int = textFlowLine.absoluteStart;&lt;br /&gt;var linkStartInLine:int = linkStart - lineStart;&lt;br /&gt;var tl:TextLine = textFlowLine.getTextLine(true)&lt;br /&gt;var rect:Rectangle = tl.getAtomBounds(linkStartInLine);            &lt;br /&gt;&lt;br /&gt;var xx:int = rect.x;&lt;br /&gt;var yy:int = rect.y; // y will always be 0&lt;br /&gt;xx = container.localToGlobal(new Point(rect.x, rect.y)).x;&lt;br /&gt;yy = container.localToGlobal(new Point(tl.x, tl.y)).y;&lt;br /&gt; &lt;br /&gt;var word:String = event.flowElement.getText(); // our link's text&lt;br /&gt;&lt;br /&gt;// ...&lt;br /&gt;// code to create and place the tooltip goes here!&lt;br /&gt;// ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In&lt;b&gt; lines 4-8&lt;/b&gt; we just destroy any previously created tooltip, if one exists.&lt;br /&gt;&lt;b&gt;Line 11&lt;/b&gt;: It's very easy to get the &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;LinkElement &lt;/span&gt;that triggered the event ,&amp;nbsp; with the event's&amp;nbsp;&amp;nbsp; &lt;span style="color: #990000;"&gt;flowElement &lt;/span&gt;property.&lt;br /&gt;In &lt;b&gt;line 14&lt;/b&gt; we use &lt;span style="color: #38761d;"&gt;getAbsoluteStart()&lt;/span&gt; to get the absolute index of our link in the textflow. &lt;br /&gt;We then use it in&lt;b&gt; li&lt;/b&gt;&lt;b&gt;ne 15&lt;/b&gt; to get the &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;TextFlowLine &lt;/span&gt;that contains that link.&lt;br /&gt;By the end of &lt;b&gt;line 16&lt;/b&gt; we have the absoluteStart of both our link and the line that contains it.&lt;br /&gt;Subtracting one from the other gives us the position of the link RELATIVE to the line.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Line 18:&lt;/b&gt; This is the part where we need the FTE to get the actual &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;TextLine &lt;/span&gt;that lays under the TextFlowLine.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Line 19:&lt;/b&gt; That's it! TextLine has a convenient method for getting for getting the bounds of a single atom (letter) in the line, by its index which we have by now!&lt;br /&gt;&lt;br /&gt;From here, converting the coordinates to global ones and creating /positioning the tooltip on these coordinates is a breeze.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #999999;"&gt;Full source will be uploaded as soon as someone leaves a comment below&amp;nbsp; :)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Full source &lt;/span&gt;&lt;a href="http://sites.google.com/site/platustalksflex/tlf_example.mxml"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-1916427969045329462?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/1916427969045329462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/08/text-layout-framework-basics-part-2.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/1916427969045329462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/1916427969045329462'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/08/text-layout-framework-basics-part-2.html' title='Text Layout Framework basics - Part 2'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5gW7pVWB8ho/THY5bCclUyI/AAAAAAAAAD4/QeCiLQ37_cY/s72-c/tlf_app_sc.PNG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-681024451677902101</id><published>2010-08-04T12:50:00.005+03:00</published><updated>2010-09-19T18:16:01.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='itemrenderer columnchart custom charting'/><title type='text'>Custom ColumnChart Labels using a Custom Item Renderer</title><content type='html'>The Charting components are usually very flexible and fit most of your needs, but sometimes they fail in the simplest of things.&lt;br /&gt;&lt;br /&gt;For example, the other day I needed a basic &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnChart &lt;/span&gt;for a business application I was working on. The request was that instead of mouse-over Data-Tips, for each column a small label would appear with its value. Sounds simple enough, right?&lt;br /&gt;&lt;br /&gt;At first for the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeries &lt;/span&gt;I set &lt;span style="color: #3d85c6;"&gt;labelPosition&lt;/span&gt; to "inside", &lt;br /&gt;&lt;br /&gt;&lt;textarea class="xml" name="code"&gt;&amp;lt;br /&amp;gt; &amp;lt;mx:ColumnChart id="cs" showDataTips="false" dataProvider="{arrColl}"&amp;gt;  &amp;lt;br /&amp;gt;   &amp;lt;mx:horizontalAxis&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:CategoryAxis id="ca" categoryField="name" /&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/mx:horizontalAxis&amp;gt;  &amp;lt;br /&amp;gt;   &amp;lt;mx:verticalAxis&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:LinearAxis baseAtZero="false" labelFunction="linearAxis_labelFunc" /&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/mx:verticalAxis&amp;gt;  &amp;lt;br /&amp;gt;   &amp;lt;mx:horizontalAxisRenderers&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:AxisRenderer axis="{ca}" canDropLabels="false" /&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/mx:horizontalAxisRenderers&amp;gt;  &amp;lt;br /&amp;gt;   &amp;lt;mx:series&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:ColumnSeries id="columnSeries"  xField="name" yField="avg" displayName="avg"          labelPosition="inside"/&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/mx:series&amp;gt;  &amp;lt;br /&amp;gt;   &amp;lt;mx:seriesFilters&amp;gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:Array /&amp;gt;&amp;lt;br /&amp;gt;   &amp;lt;/mx:seriesFilters&amp;gt;  &amp;lt;br /&amp;gt;  &amp;lt;/mx:ColumnChart&amp;gt; &amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;and I got this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_5gW7pVWB8ho/TFguT-3nsWI/AAAAAAAAACA/DwnGv6jbbXs/s1600/cb1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://1.bp.blogspot.com/_5gW7pVWB8ho/TFguT-3nsWI/AAAAAAAAACA/DwnGv6jbbXs/s640/cb1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp;OK, so the last column is too short to contain the label, but it would be nice if the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeries &lt;/span&gt;nudged it up a bit. Alas, no such luck.&lt;br /&gt;&lt;br /&gt;Oh well, I thought, it wouldn't make much of a difference if the labels were to be &lt;b&gt;outside&lt;/b&gt;, so I changed &lt;span style="color: #3d85c6;"&gt;labelPosition&lt;/span&gt; again and this time I got:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_5gW7pVWB8ho/TFgu2EQlXSI/AAAAAAAAACI/c190Xa-2o9k/s1600/cb2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/_5gW7pVWB8ho/TFgu2EQlXSI/AAAAAAAAACI/c190Xa-2o9k/s640/cb2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Two problems: First, I wanted the labels &lt;b&gt;outside&lt;/b&gt;, so why is the "0.9" &lt;b&gt;inside&lt;/b&gt; the bar?&lt;br /&gt;And second, why are my labels suddenly aligned to the left? I want them centered! And I know that it's possible.&lt;br /&gt;&lt;br /&gt;You'd think adding the property &lt;span style="color: #3d85c6;"&gt;labelAlign &lt;/span&gt;to "center" would fix that. Wrong again! When &lt;span style="color: #3d85c6;"&gt;labelPosition &lt;/span&gt;is set to &lt;i&gt;outside &lt;/i&gt;the only alignment possible is left. Why? Makes no sense to me...&lt;br /&gt;&lt;br /&gt;Anyway, to make a long story short, after some research I came to the conclusion that the easiest way to fix these issues would be to simply write my own &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeries &lt;/span&gt;item renderer, adding the labels to it manually.&lt;br /&gt;&lt;br /&gt;Don't worry, no more "buts"; Writing an Item Renderer from scratch in this case is super easy! All you need to do is extend &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;UIComponent&lt;/span&gt; making sure that you implement the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IDataRenderer &lt;/span&gt;interface.&lt;br /&gt;&lt;br /&gt;The result we want to achieve is this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFkVI9C04eI/AAAAAAAAACY/nxp4Ne546yQ/s1600/cb4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFkVI9C04eI/AAAAAAAAACY/nxp4Ne546yQ/s640/cb4.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If a bar is too short to fully contain its label (like Europe in the screenshot), the label should appear above it.&lt;/li&gt;&lt;li&gt;The labels should be horizontally &lt;b&gt;and &lt;/b&gt;vertically centered. &lt;/li&gt;&lt;li&gt;If the label is outside a bar, its color should change.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;So, how do we do it?&lt;/b&gt;&lt;br /&gt;First, we tell the ColumnSeries that we we want to use our own class (Let's call it&amp;nbsp; ColumnBarRenderer) as a renderer. We'd better also remove the &lt;span style="color: #3d85c6;"&gt;labelPosition &lt;/span&gt;property because we're going to put our own label.&lt;br /&gt;&lt;br /&gt;&lt;textarea class="xml" name="code"&gt;&amp;lt;br /&amp;gt;    &amp;lt;mx:ColumnSeries id="columnSeries"  xField="name" yField="avg" displayName="avg"          itemRenderer="ColumnBarRenderer"/&amp;gt;&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;Now let's create the class. Like I said, it should extend &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;UIComponent &lt;/span&gt;and implement &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IDataRenderer&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Implementing &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IDataRenderer &lt;/span&gt;is actually very simple - all we need to do is include a getter and a setter for the "data" object. In this case, the data object that will be passed to us will be of type&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem &lt;/span&gt;(base class: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ChartItem&lt;/span&gt;). We need this data in our renderer because it contains all we need to know about the column bar we are drawing.&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;private var _chartItem:ChartItem;&lt;br /&gt;  &lt;br /&gt;  public function set data(value:Object):void&lt;br /&gt;     {&lt;br /&gt;         if (_chartItem == value) return;&lt;br /&gt;           // setData also is executed if there is a Legend Data &lt;br /&gt;           // defined for the chart. We validate that only chartItems are &lt;br /&gt;           // assigned to the chartItem class. &lt;br /&gt;         if (value is LegendData) &lt;br /&gt;          return;&lt;br /&gt;         _chartItem = ChartItem(value);         &lt;br /&gt;     } &lt;br /&gt;  &lt;br /&gt;     public function get data():Object&lt;br /&gt;     {&lt;br /&gt;         return _chartItem;&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;The second step is to create our custom label. In a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;UIComponent &lt;/span&gt;the creation of child components is usually done in the &lt;span style="color: #38761d;"&gt;createChildren()&lt;/span&gt; function. So let's override it and create our label there, formatting it as we like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;private var label:Label;&lt;br /&gt;&lt;br /&gt;  override protected function createChildren():void&lt;br /&gt;  { &lt;br /&gt;   super.createChildren();&lt;br /&gt;   if (label == null)&lt;br /&gt;         {&lt;br /&gt;          label = new Label();&lt;br /&gt;          label.truncateToFit = true; &lt;br /&gt;          label.setStyle("fontSize", 12);       &lt;br /&gt;          label.setStyle("textAlign", "center");&lt;br /&gt;          addChild(label);&lt;br /&gt;         }         &lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, you're probably thinking : "I somehow need to know the dimensions of the column I'm drawing, don't I?" Well, No. Because the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnChart &lt;/span&gt;already &lt;b&gt;sizes&lt;/b&gt; every renderer that it creates, when we update the display list for our renderer, the size of our &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;UIComponent &lt;/span&gt;is &lt;b&gt;already &lt;/b&gt;the calculated size of the column (according to its current value).&lt;br /&gt;&lt;br /&gt;Here's a simplified version of our renderer's &lt;span style="color: #38761d;"&gt;updateDisplayList()&lt;/span&gt; function (the code that handles the label is omitted): &lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void&lt;br /&gt;  {&lt;br /&gt;   super.updateDisplayList(unscaledWidth, unscaledHeight);&lt;br /&gt;   &lt;br /&gt;   var rc:Rectangle = new Rectangle(0, 0, width, height);        &lt;br /&gt;   var g:Graphics = graphics;&lt;br /&gt;   g.clear();        &lt;br /&gt;   g.moveTo(rc.left, rc.top);&lt;br /&gt;   &lt;br /&gt;   //&lt;br /&gt;   // handle label position here&lt;br /&gt;   //&lt;br /&gt;   &lt;br /&gt;   if (_chartItem == null) // _chartItem has no data&lt;br /&gt;    return;&lt;br /&gt;   &lt;br /&gt;   // Draw the column&lt;br /&gt;   g.beginFill(0xff0000, 0.9);&lt;br /&gt;   g.lineTo(rc.right,rc.top);&lt;br /&gt;   g.lineTo(rc.right,rc.bottom);&lt;br /&gt;   g.lineTo(rc.left,rc.bottom);&lt;br /&gt;   g.lineTo(rc.left,rc.top);&lt;br /&gt;   g.endFill();    &lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that we simply draw a box from (0,0) to (width,height) of the component. We don't have to deal with the calculations of how high the column should be depending on its value, or how wide, etc. All of this is already done for us.&amp;nbsp; Pretty neat, huh?&lt;br /&gt;&lt;br /&gt;So far so good, but now comes the tricky part, i.e. positioning the label vertically-(and horizontally)-centered inside each column, except when there's no room for it (because the column value is too low), in which case we need to position it slightly &lt;b&gt;above &lt;/b&gt;the bar. And let's not forget to set the text of the label, containing its numeric value.&lt;br /&gt;&lt;br /&gt;Like I said before, the only way for our renderer to get any information about the chart and its data is through the &lt;b&gt;data&lt;/b&gt; property which we stored in the getter (in the _chartItem which is a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem &lt;/span&gt;contains all the information we need about the box we're currently drawing (including the data row itself), but also the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeries &lt;/span&gt;(through the &lt;span style="color: #3d85c6;"&gt;.element&lt;/span&gt; property). Specifically, we get from that the &lt;b&gt;yField&lt;/b&gt; of the series, so we can extract the value from the data item and set it as the label's text.&lt;br /&gt;&lt;br /&gt;OK, let's cut to the chase. Here's how we set the label:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;var cs:ColumnSeries = _chartItem.element as ColumnSeries;&lt;br /&gt;var csi:ColumnSeriesItem = _chartItem as ColumnSeriesItem;&lt;br /&gt;   &lt;br /&gt;// set the label           &lt;br /&gt;label.text = csi.item[cs.yField].toString();          &lt;br /&gt;label.width = label.maxWidth = unscaledWidth;         &lt;br /&gt;label.height = label.textHeight;&lt;br /&gt;var labelHeight:int = label.textHeight + 2;&lt;br /&gt;&lt;/pre&gt;In lines 1 and 2 we extract the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeries &lt;/span&gt;and the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem &lt;/span&gt;from the data.&lt;br /&gt;In line 5, we use the series' &lt;b style="color: #3d85c6;"&gt;yField&lt;/b&gt;&lt;b&gt; &lt;/b&gt;property to get the numeric value of the current column from the item itself.&lt;br /&gt;In line 6 the width of the label is set to match the total width of our column so that the label will be centered (remember that in createChildren we set the textAlign of the label to 'center'). Line 7 sets the height to match the label's actual height (depending on the its set font size). Finally we store that height.&lt;br /&gt;&lt;br /&gt;Now let's see how we position the label:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;// label's default y is 0. if the bar is too short we need to move it up a bit&lt;br /&gt;         var barYpos:Number = csi.y;&lt;br /&gt;         var minYpos:Number = csi.min;&lt;br /&gt;  var barHeight:Number = minYpos - barYpos;&lt;br /&gt;  var labelColor:uint = 0xFFFFFF; // white&lt;br /&gt;        &lt;br /&gt;         if (barHeight &amp;lt; labelHeight) // if no room for label&lt;br /&gt;         {&lt;br /&gt;    // nudge label up the amount of pixels missing&lt;br /&gt;          label.y = -1 * (labelHeight - barHeight);&lt;br /&gt;          labelColor = 0x222222; // label will appear on white background, so make it dark          &lt;br /&gt;         }&lt;br /&gt;         else&lt;br /&gt;          { &lt;br /&gt;          // center the label vertically in the bar&lt;br /&gt;                 label.y = barHeight / 2 - labelHeight / 2;&lt;br /&gt;          }&lt;br /&gt;   &lt;br /&gt;  label.setStyle("color", labelColor);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The key to understand this code is to know what the two properties &lt;span style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem.y&lt;/span&gt; and &lt;span style="color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ColumnSeriesItem.min&lt;/span&gt;&lt;b&gt; &lt;/b&gt;mean.&lt;br /&gt;If our chart's top y position is 0, then &lt;span style="color: #3d85c6;"&gt;csi.y&lt;/span&gt; is where our column box begins (or ends), and &lt;span style="color: #3d85c6;"&gt;csi.min&lt;/span&gt; is where it ends (or begins, depends how you look at it).&lt;br /&gt;What I mean is :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5gW7pVWB8ho/TFk0uMEGn6I/AAAAAAAAACo/3Mb7q4Vx_oA/s1600/cb5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://2.bp.blogspot.com/_5gW7pVWB8ho/TFk0uMEGn6I/AAAAAAAAACo/3Mb7q4Vx_oA/s400/cb5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;Once you know this, checking if our label fits in the column box is a piece of cake, as well as nudging it up a bit if needed, and centering it vertically.&lt;br /&gt;&lt;br /&gt;The full source can be found &lt;a href="http://sites.google.com/site/platustalksflex/CustomColumnRendererCode.rar"&gt;here&lt;/a&gt;. (RAR file)&lt;br /&gt;For a ZIP file click &lt;a href="https://sites.google.com/site/platustalksflex/CustomColumnRendererCodeZip.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-681024451677902101?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/681024451677902101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/08/custom-columnchart-labels-using-custom.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/681024451677902101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/681024451677902101'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/08/custom-columnchart-labels-using-custom.html' title='Custom ColumnChart Labels using a Custom Item Renderer'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5gW7pVWB8ho/TFguT-3nsWI/AAAAAAAAACA/DwnGv6jbbXs/s72-c/cb1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-7954071614765005722</id><published>2010-07-30T11:14:00.009+03:00</published><updated>2010-08-08T17:28:06.715+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='text layout framework'/><title type='text'>Text Layout Framework  Basics - Part 1</title><content type='html'>&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;In this series I am going to explain the basics of using Adobe's new&amp;nbsp; Text Framework.&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;b&gt; &lt;/b&gt;In this first part you'll learn about the Flash Text Engine.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The &lt;span style="color: #134f5c;"&gt;Flash Text Engine&lt;/span&gt; (FTE) is a set of new classes (found in the &lt;span style="background-color: white; color: #0b5394;"&gt;&lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;flash.text.engine.*&lt;/span&gt;&lt;/span&gt; package) that support low-level text functionality in Flash Player 10&lt;br /&gt;&lt;br /&gt;While you &lt;i&gt;can &lt;/i&gt;use the FTE in Flash Builder 4 to render text, you will probably more often use the &lt;i&gt;TLF &lt;/i&gt;&lt;br /&gt;(&lt;span style="color: #45818e;"&gt;Text Layout Framework&lt;/span&gt;), which is a set of classes built on top of the FTE to provide more high-level text functionality, such as scrolling, selection and editing.&lt;br /&gt;&lt;br /&gt;But let's not rush things (TLF will be covered in the next part). Right now let's take a quick look at the main classes of the Flash Text Engine and see what we can do with them.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFEiPa9eAPI/AAAAAAAAABo/in2cJuOTIVk/s1600/tfe_classes.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="289" src="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFEiPa9eAPI/AAAAAAAAABo/in2cJuOTIVk/s640/tfe_classes.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;A &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;TextBlock &lt;/span&gt;holds a single paragraph of text, built from 3 types of &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;ContentElement&lt;/span&gt;s:&lt;br /&gt;( &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;ContentElement&lt;/span&gt;  is the base class for each of the three, but it's an abstract class so you won't be able to create an instance of it by itself) :&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;TextElement&lt;/span&gt; , which is simply a string&lt;/li&gt;&lt;li&gt;&lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;GraphicElement&lt;/span&gt; which is any graphic or image that you wish to include in your text. &lt;/li&gt;&lt;li&gt;&lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;GroupElement&lt;/span&gt; which is a just container for the other two classes, but may also contain other (nested)&amp;nbsp;&lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;GroupElement&lt;/span&gt;s.&lt;/li&gt;&lt;/ul&gt;So I could, for example, create two TextElements, one with the string "hello" and the other with "world", put them inside a GroupElement and then put that group inside a TextBlock, and what I'll have is a nice "helloworld" block of text (with no space between the words, because none of my strings included one).&lt;br /&gt;&lt;br /&gt;The only problem with this TextBlock, however, would be that because it's not a DisplayObject,&amp;nbsp; &lt;b&gt;&lt;br /&gt;no user will ever see it&lt;/b&gt;. And in fact, all of the aforementioned classes are purely logical classes in the sense that they just hold &lt;i&gt;information &lt;/i&gt;about the text composition, but not the text itself.&lt;br /&gt;&lt;br /&gt;Luckily, the &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;TextBlock &lt;/span&gt;has a nice method called &lt;span style="color: #38761d; font-family: 'Courier New',Courier,monospace;"&gt;createTextLine()&lt;/span&gt; which, unsuprisingly, takes the TextBlock and generates&amp;nbsp; &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;TextLine&lt;/span&gt;s &amp;nbsp;from it that can&amp;nbsp;easily&amp;nbsp;be added to the display list (we'll see how it's done in a moment).&lt;br /&gt;&lt;br /&gt;One additional class that does not show in the nice diagram above, but is just as important, is the &lt;span style="color: #0b5394; font-family: 'Courier New',Courier,monospace;"&gt;ElementFormat&lt;/span&gt; class, which defines the text styling (like the color, alpah, font, etc.) for any ContentElement, via the &lt;span style="color: #38761d; font-family: 'Courier New',Courier,monospace;"&gt;elementFormat &lt;/span&gt;property.&lt;br /&gt;&lt;br /&gt;But enough talk. Let's see some things in action! The following example application creates a TextBlock containing the first two sentences from the book "Moby Dick", and displays the first two TextLines from it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Explanations - after the code (and also inside the code, as comments).&lt;br /&gt;&lt;div align="left" class="code"&gt;&lt;table border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" nowrap="nowrap" valign="top"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;?xml&amp;nbsp;version=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"1.0"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;encoding=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"utf-8"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;s:Application&amp;nbsp;xmlns:fx=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"http://ns.adobe.com/mxml/2009"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;creationComplete=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"creationCompleteHandler(event)"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;xmlns:s=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"library://ns.adobe.com/flex/spark"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;xmlns:mx=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"library://ns.adobe.com/flex/mx"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;minWidth=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"955"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;minHeight=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"600"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;fx:Script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;CDATA&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.ContentElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.ElementFormat;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.GroupElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.TextBlock;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.TextElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flash.text.engine.TextLine;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;mx.events.FlexEvent;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;protected&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #339966;"&gt;&lt;b&gt;function&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;creationCompleteHandler&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;event:FlexEvent&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;prepare&amp;nbsp;the&amp;nbsp;text&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;str1:String&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"Call&amp;nbsp;me&amp;nbsp;Ishmael.&amp;nbsp;Some&amp;nbsp;years&amp;nbsp;ago&amp;nbsp;-&amp;nbsp;never&amp;nbsp;mind&amp;nbsp;how&amp;nbsp;long&amp;nbsp;precisely&amp;nbsp;-&amp;nbsp;having&amp;nbsp;little&amp;nbsp;or&amp;nbsp;no&amp;nbsp;money&amp;nbsp;in&amp;nbsp;my&amp;nbsp;purse,&amp;nbsp;"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;str2:String&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"and&amp;nbsp;nothing&amp;nbsp;particular&amp;nbsp;to&amp;nbsp;interest&amp;nbsp;me&amp;nbsp;on&amp;nbsp;shore,&amp;nbsp;I&amp;nbsp;thought&amp;nbsp;I&amp;nbsp;would&amp;nbsp;sail&amp;nbsp;about&amp;nbsp;a&amp;nbsp;little&amp;nbsp;and&amp;nbsp;see&amp;nbsp;the&amp;nbsp;watery&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;world."&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;prepare&amp;nbsp;text&amp;nbsp;formatting&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;format:ElementFormat&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;ElementFormat&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;format.fontSize&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;14&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;create&amp;nbsp;two&amp;nbsp;text&amp;nbsp;elements,&amp;nbsp;one&amp;nbsp;for&amp;nbsp;each&amp;nbsp;string&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;te1:TextElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;TextElement&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;str1,&amp;nbsp;format&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;te2:TextElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;TextElement&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;str2,&amp;nbsp;format&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;prepare&amp;nbsp;an&amp;nbsp;array&amp;nbsp;containing&amp;nbsp;the&amp;nbsp;two&amp;nbsp;textElements&amp;nbsp;and&amp;nbsp;include&amp;nbsp;them&amp;nbsp;in&amp;nbsp;a&amp;nbsp;GroupElement&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;groupVector:Vector.&amp;lt;ContentElement&amp;gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Vector.&amp;lt;ContentElement&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;groupVector.push&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;te1&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;groupVector.push&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;te2&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;ge:GroupElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;GroupElement&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;groupVector,&amp;nbsp;format&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;textblock&amp;nbsp;holding&amp;nbsp;the&amp;nbsp;composed&amp;nbsp;group&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;tb:TextBlock&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;tb.content&amp;nbsp;=&amp;nbsp;ge;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;Create&amp;nbsp;two&amp;nbsp;TextLines&amp;nbsp;from&amp;nbsp;the&amp;nbsp;TextBlock&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;tl1:TextLine&amp;nbsp;=&amp;nbsp;tb.createTextLine&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;550&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;first&amp;nbsp;line&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;container.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;tl1&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;tl2:TextLine&amp;nbsp;=&amp;nbsp;tb.createTextLine&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;tl1,&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;550&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;second&amp;nbsp;line&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;container.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;tl2&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;tl2.y&amp;nbsp;=&amp;nbsp;tl1.textHeight;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;]]&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/fx:Script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;fx:Declarations&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;!--&amp;nbsp;Place&amp;nbsp;non-visual&amp;nbsp;elements&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;e.g.,&amp;nbsp;services,&amp;nbsp;value&amp;nbsp;objects&lt;/span&gt;&lt;span style="color: black;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;here&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/fx:Declarations&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;s:Group&amp;nbsp;id=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"group"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;y=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"30"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;s:layout&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;s:VerticalLayout&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/s:layout&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;s:SpriteVisualElement&amp;nbsp;id=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"container"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/s:Group&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;/s:Application&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The result :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFGUJ7PswEI/AAAAAAAAAB4/AcnzAy5BcdQ/s1600/fteExample.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="76" src="http://3.bp.blogspot.com/_5gW7pVWB8ho/TFGUJ7PswEI/AAAAAAAAAB4/AcnzAy5BcdQ/s640/fteExample.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt;    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;The first thing you probably notice when you run the application is that the text is not fully shown.&lt;br /&gt;The reason is that when you create a  TextLine, you also must specify its desired (max) width. In this case I gave the two TextLines 550 pixels each, and that simply was not enough to hold all of my text.&lt;br /&gt;&lt;br /&gt;The second thing to note is that for the first parameter, createTextLine() expects you pass&lt;b&gt; the previously created TextLine &lt;/b&gt;(or Null if it's the first). This is required so that the function can calculate the position from which it should continue reading the text.&lt;br /&gt;&lt;br /&gt;But what if we wanted to change the code so that ALL of my text will be shown, no matter what?&lt;br /&gt;To do that, we would simply have to keep creating TextLines... until we run out of text :&lt;br /&gt;&lt;div align="left" class="code"&gt;&lt;table border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" nowrap="nowrap" valign="top"&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;yPos:int&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine:TextLine&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;while&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;yPos&amp;nbsp;+=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;null&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;?&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;:&amp;nbsp;prevTextLine.textHeight&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine&amp;nbsp;=&amp;nbsp;tb.createTextLine&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine,&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;550&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;if&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;container.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;prevTextLine.y&amp;nbsp;=&amp;nbsp;yPos;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;createTextLine()&lt;/span&gt; returns Null when the end of the text is reached, so at that point we exit the loop.&lt;br /&gt;&lt;br /&gt;**&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In the next part &lt;/b&gt;I'll talk about the more useful Text Layout Framework (TLF) that simplifies things and adds some powerful functionality. I'll demonstrate how you can use it to enable mouse interactions on rendered text (i.e. show a tooltip on a word or phrase on mouseover).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-7954071614765005722?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/7954071614765005722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/text-layout-framework-basics-part-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/7954071614765005722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/7954071614765005722'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/text-layout-framework-basics-part-1.html' title='Text Layout Framework  Basics - Part 1'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5gW7pVWB8ho/TFEiPa9eAPI/AAAAAAAAABo/in2cJuOTIVk/s72-c/tfe_classes.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-325196360209067440</id><published>2010-07-24T14:16:00.013+03:00</published><updated>2010-08-08T17:28:38.787+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='text layout framework'/><title type='text'>Inline UIComponents within a TextFlow</title><content type='html'>&lt;div&gt;Lately I've been thinking about how to go about coding a "&lt;i&gt;fill in the gap&lt;/i&gt;" exercise. This kind of exercise is very popular in e-learning applications : the user is presented with text in which a few words are missing, and he has to type them in (or select them from a list).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5gW7pVWB8ho/TErMGwTTSGI/AAAAAAAAAAs/eIVx2CpKsH0/s1600/fillgap.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://3.bp.blogspot.com/_5gW7pVWB8ho/TErMGwTTSGI/AAAAAAAAAAs/eIVx2CpKsH0/s400/fillgap.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Now, prior to &lt;b&gt;Text Layout Framework&lt;/b&gt;, you would probably be forced to break down your text into single words, adding each one as a &lt;i&gt;Label &lt;/i&gt;to a container (and of course a &lt;i&gt;TextInput &lt;/i&gt;where needed). While this &lt;i&gt;sounds &amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;relatively &lt;/span&gt;&lt;/i&gt;easy, it's actually not once you start realizing that you need to position the labels yourself, taking into consideration things like line breaks, mixed RTL/LTR text, nested text styling, etc. etc., which no programmer should ever have be left to deal with on his own (that is, unless what he's actually coding IS a text framework).&lt;br /&gt;&lt;br /&gt;Luckily, now that we &lt;b&gt;do &lt;/b&gt;have the TLF available to us in Flex 4, things are much &lt;a href="http://answers.yahoo.com/question/index?qid=20080614025125AANeP1t"&gt;more simple&lt;/a&gt;. The example below is pretty straightforward (and very well commented), but the idea is:&amp;nbsp;We add each word or phrase as a &lt;i&gt;SpanElement &lt;/i&gt;inside a &lt;i&gt;ParagraphElement. &lt;/i&gt;For the blank gaps&amp;nbsp;we add an empty&amp;nbsp;&lt;i&gt;InlineGraphicElement &amp;nbsp;&lt;/i&gt;to serve as a placeholder. Once we update the display all we have left to do is calculate where that&amp;nbsp;&lt;i&gt;InlineGraphicElement &amp;nbsp;&lt;/i&gt;is (x,y), and add our own flex-UIComponent-based component in its place.&lt;br /&gt;&lt;br /&gt;This example is a very basic one. I might post a more extensive one (based on given XML, etc.) if/when I ever get to writing one.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="left" class="code"&gt;&lt;table border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;    &lt;td align="left" nowrap="nowrap" valign="top"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;?xml&amp;nbsp;version=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"1.0"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;encoding=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"utf-8"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;s:Application&amp;nbsp;creationComplete=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"init()"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;xmlns:fx=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"http://ns.adobe.com/mxml/2009"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;xmlns:s=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"library://ns.adobe.com/flex/spark"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;xmlns:mx=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"library://ns.adobe.com/flex/mx"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;minWidth=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"955"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;minHeight=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"600"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;fx:Declarations&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;!--&amp;nbsp;Place&amp;nbsp;non-visual&amp;nbsp;elements&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;e.g.,&amp;nbsp;services,&amp;nbsp;value&amp;nbsp;objects&lt;/span&gt;&lt;span style="color: black;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;here&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/fx:Declarations&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;fx:Script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;CDATA&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.container.ContainerController;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.edit.SelectionManager;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.elements.InlineGraphicElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.elements.ParagraphElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.elements.SpanElement;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;flashx.textLayout.elements.TextFlow;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;mx.collections.ArrayList;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;mx.core.UIComponent;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;import&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;spark.components.DropDownList;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;Bindable&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;private&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow:TextFlow;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;Bindable&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;private&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;_ac:ArrayList&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;ArrayList&lt;/span&gt;&lt;span style="color: black;"&gt;([{&lt;/span&gt;&lt;span style="color: black;"&gt;label:&lt;/span&gt;&lt;span style="color: #ff6100;"&gt;'re&lt;/span&gt;&lt;span style="color: black;"&gt;d&lt;/span&gt;&lt;span style="color: #ff6100;"&gt;'},&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;span style="color: black;"&gt;label:&lt;/span&gt;&lt;span style="color: #ff6100;"&gt;'la&lt;/span&gt;&lt;span style="color: black;"&gt;zy&lt;/span&gt;&lt;span style="color: #ff6100;"&gt;'}]&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;private&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #339966;"&gt;&lt;b&gt;function&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;init&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;textflow&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;TextFlow&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;create&amp;nbsp;sprite&amp;nbsp;to&amp;nbsp;contain&amp;nbsp;the&amp;nbsp;text&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;sprite:Sprite&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Sprite&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;contain&amp;nbsp;the&amp;nbsp;textflow&amp;nbsp;in&amp;nbsp;that&amp;nbsp;sprite&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow.flowComposer.addController&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;ContainerController&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;sprite,&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;500&lt;/span&gt;&lt;span style="color: black;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;100&lt;/span&gt;&lt;span style="color: black;"&gt;))&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;create&amp;nbsp;a&amp;nbsp;paragraph&amp;nbsp;and&amp;nbsp;set&amp;nbsp;font&amp;nbsp;size&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;p:ParagraphElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;ParagraphElement&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;p.fontSize&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;14&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;some&amp;nbsp;words&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;addText&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;p,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"The&amp;nbsp;"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;addText&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;p,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"quick&amp;nbsp;brown&amp;nbsp;fox&amp;nbsp;jumps&amp;nbsp;over&amp;nbsp;the"&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;an&amp;nbsp;empty&amp;nbsp;InlineGraphicElement&amp;nbsp;as&amp;nbsp;a&amp;nbsp;placeholder&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;pHolder:InlineGraphicElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;InlineGraphicElement&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;pHolder.width&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;120&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;pHolder.height&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;20&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;p.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;pHolder&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;another&amp;nbsp;phrase&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;addText&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;p,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"dog."&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;the&amp;nbsp;paragraph&amp;nbsp;to&amp;nbsp;the&amp;nbsp;textflow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;p&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;allow&amp;nbsp;only&amp;nbsp;selection&amp;nbsp;of&amp;nbsp;text&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow.interactionManager&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;SelectionManager&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;update&amp;nbsp;the&amp;nbsp;display&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_textFlow.flowComposer.updateAllControllers&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;figure&amp;nbsp;out&amp;nbsp;the&amp;nbsp;absolute&amp;nbsp;position&amp;nbsp;of&amp;nbsp;the&amp;nbsp;InlineGraphicElement&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;note&amp;nbsp;that&amp;nbsp;an&amp;nbsp;InlineGraphicElement's&amp;nbsp;graphic&amp;nbsp;position&amp;nbsp;is&amp;nbsp;always&amp;nbsp;0,0&amp;nbsp;inside&amp;nbsp;a&amp;nbsp;parent&amp;nbsp;Sprite.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;ph:Sprite&amp;nbsp;=&amp;nbsp;pHolder.graphic.parent&amp;nbsp;as&amp;nbsp;Sprite;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i.e.&amp;nbsp;var&amp;nbsp;phPoint:Point&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Point(pHolder.graphic.x,&amp;nbsp;pHolder.graphic.y);&amp;nbsp;//&amp;nbsp;phPoint&amp;nbsp;will&amp;nbsp;always&amp;nbsp;equal&amp;nbsp;(0,0)&amp;nbsp;!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;combobox&amp;nbsp;and&amp;nbsp;set&amp;nbsp;its&amp;nbsp;dimensions&amp;nbsp;and&amp;nbsp;data&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;cb:DropDownList&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;DropDownList&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;cb.dataProvider&amp;nbsp;=&amp;nbsp;_ac;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;cb.width&amp;nbsp;=&amp;nbsp;pHolder.width&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;20&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;cb.height&amp;nbsp;=&amp;nbsp;pHolder.height;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;the&amp;nbsp;text&amp;nbsp;to&amp;nbsp;the&amp;nbsp;display&amp;nbsp;list&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;container.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;sprite&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;move&amp;nbsp;the&amp;nbsp;sprite&amp;nbsp;from&amp;nbsp;its&amp;nbsp;(0,0)&amp;nbsp;default&amp;nbsp;just&amp;nbsp;to&amp;nbsp;prove&amp;nbsp;that&amp;nbsp;the&amp;nbsp;position&amp;nbsp;of&amp;nbsp;the&amp;nbsp;combobox&amp;nbsp;is&amp;nbsp;calculated&amp;nbsp;correctly&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;sprite.x&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;50&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;sprite.y&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;30&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;position&amp;nbsp;combobox&amp;nbsp;over&amp;nbsp;the&amp;nbsp;InlineGraphicElement&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;cb.move&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;pHolder.graphic.localToGlobal&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Point&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;))&lt;/span&gt;&lt;span style="color: black;"&gt;.x&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;10&lt;/span&gt;&lt;span style="color: black;"&gt;,&amp;nbsp;pHolder.graphic.localToGlobal&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Point&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;))&lt;/span&gt;&lt;span style="color: black;"&gt;.y&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;add&amp;nbsp;the&amp;nbsp;combobox.&amp;nbsp;note&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;done&amp;nbsp;AFTER&amp;nbsp;adding&amp;nbsp;the&amp;nbsp;sprite&amp;nbsp;so&amp;nbsp;that&amp;nbsp;it&amp;nbsp;will&amp;nbsp;be&amp;nbsp;on&amp;nbsp;top&amp;nbsp;and&amp;nbsp;interactive&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;addElement&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;cb&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #009900;"&gt;//&amp;nbsp;creates&amp;nbsp;a&amp;nbsp;span&amp;nbsp;with&amp;nbsp;some&amp;nbsp;text&amp;nbsp;and&amp;nbsp;adds&amp;nbsp;it&amp;nbsp;to&amp;nbsp;the&amp;nbsp;given&amp;nbsp;paragraph&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;private&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #339966;"&gt;&lt;b&gt;function&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;addText&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;p:ParagraphElement,&amp;nbsp;phraseText:String&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #6699cc;"&gt;&lt;b&gt;var&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;span:SpanElement&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0033ff;"&gt;&lt;b&gt;new&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;SpanElement&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;span.text&amp;nbsp;=&amp;nbsp;phraseText;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;p.addChild&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;span&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;]]&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;/fx:Script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;s:SpriteVisualElement&amp;nbsp;id=&lt;/span&gt;&lt;span style="color: #990000;"&gt;&lt;b&gt;"container"&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;lt;/s:Application&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-325196360209067440?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/325196360209067440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/position-uicomponents-inside-textflow.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/325196360209067440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/325196360209067440'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/position-uicomponents-inside-textflow.html' title='Inline UIComponents within a TextFlow'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5gW7pVWB8ho/TErMGwTTSGI/AAAAAAAAAAs/eIVx2CpKsH0/s72-c/fillgap.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499527377501170391.post-6574910249912558750</id><published>2010-07-24T11:30:00.012+03:00</published><updated>2010-08-04T10:15:30.579+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='text layout framework'/><title type='text'>Flex Text Layout Framework - "How To" post</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Since this is my first post to the blog, let me introduce myself (but only briefly, since I find it kind of boring): I have been a UI programmer for about 10 years now, beginning with the ancient Visual Basic, continuing to web development (mostly with XSL and JS), &amp;nbsp;and for the last 2 years I've been using Flex 3 for the UI interface of a Transaction Management application in the company I work for.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I have found Flex 3 to be an overall solid (and fun to work with) framework (espcially compared to JS), but also somewhat frustrating at times&amp;nbsp;(especially when extending the framework's native classes becomes a must)., so I'm quite excited about learning and switching to Flex 4, hoping for things to be more smooth&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Anyway,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've been especially interested in Adobe's new TLF (Text Layout Framework) for some time now, having in mind an idea for a project that requires some heavy text rendering&amp;nbsp;capabilities. Now that it's finally out and included in Flash Builder 4, I am trying to find the time to research it again.&lt;br /&gt;&lt;br /&gt;As I do so, I figured it could be helpful for programmers new to the TLF (such as I, at least currently) to maintain a "How To" post with links to useful articles in other blogs, forums, etc. that I may stumble across.&lt;br /&gt;&lt;br /&gt;I will be adding more links as I find them....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devgirl.wordpress.com/2010/04/26/flex-4-and-the-text-layout-framework/"&gt;Introduction to the Text Layout Framework in Flex 4&lt;/a&gt;&lt;br /&gt;If you know nothing (programmatic-wise) about the TLF, this is the place to start. You need to know the relationship between the following classes/interfaces: &lt;i&gt;TextFlow&lt;/i&gt;, &lt;i&gt;ContainerController&lt;/i&gt;, &lt;i&gt;IFlowComposer&lt;/i&gt;, and &lt;i&gt;TextLayoutFormat&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://insideria.com/2009/06/utilizing-flash-text-layout-fr.html"&gt;Utilizing Flash Text Layout Framework using MXML tags&lt;/a&gt;&lt;br /&gt;Elad Elrom's article gives you a nice summary about the connection between the &amp;nbsp;TLF and Flex 4's new text-based components.&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: Since this article is based on the &lt;i&gt;Beta &lt;/i&gt;version of flex 4, some things are no longer true (for example, &lt;i&gt;SimpleText &lt;/i&gt;is now called &lt;i&gt;Label. &lt;/i&gt;Why?&lt;i&gt;&amp;nbsp;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Spark+Text+Primitives+Decision"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;See here&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;&lt;i&gt;UPDATE&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: I've decided to abandon this post thread, replacing it with with a series of tutorials about the Text Layout Framework. So watch out for future posts!&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;i&gt;&lt;a href="http://sites.google.com/site/platustalksflex/blog.rar?attredirects=0&amp;amp;d=1"&gt;test &lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499527377501170391-6574910249912558750?l=platustalksflex.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platustalksflex.blogspot.com/feeds/6574910249912558750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/fkex-text-layout-framework-how-to-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/6574910249912558750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499527377501170391/posts/default/6574910249912558750'/><link rel='alternate' type='text/html' href='http://platustalksflex.blogspot.com/2010/07/fkex-text-layout-framework-how-to-post.html' title='Flex Text Layout Framework - &quot;How To&quot; post'/><author><name>platus</name><uri>http://www.blogger.com/profile/00027843306587988819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_5gW7pVWB8ho/TE7LHWJWAXI/AAAAAAAAABI/VyEImcz-0VQ/S220/neon-genesis-evangelion-ikari-shinji.jpg'/></author><thr:total>0</thr:total></entry></feed>
