دوست عزیز همونطور که گفتم تو معماری طراحی کاموننتهای فلش از class text استفاده شده یعنی قابلیتهای متون فارسی در اون وجود نداره برای اینکه این قابلیت رو به این کامپوننتها اضافه کنیم باید از FTE یا TLF استفاده کنیم. من واستون شخصی سازی دو کنترلر List و TextInput رو میگم بقیش هم شبیه اینه و میتونید بقیه کامپوننتها رو هم مطابق با نیازتون اصلاح کنید و در نهایت یه نمونه میزارم .
خوب بریم سراغ TextInput :
برای اینکه ابتدا بتونیم این کنترلرها رو ویرایش کنیم باید سورشون رو کنار پروزه بزاریم (توصیه اینکه سورس اصلی رو دستکاری نکنید ) برای اینکار میریم به این مسیر :
HTML:
\Adobe\Adobe Flash CS5.5\Common\Configuration\Component Source\ActionScript 3.0\User Interface
و فولدر fl رو کنار پروژه میزاریم حالا کنترلر TextInput رو برمیداریم اگه از تو کتابخانه بر روی این کنترلر راست کلیک کنید و edit class رو بزنید سورس این کامپوننت باز میشه. در اینجا اگه دقت کنید برای ساخت این کامپوننت از کلاسهای کلاسیک تکست استفاده شده
PHP:
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.text.TextLineMetrics;
حالا واسه اینکه این کنترلر رو اصلاح کنیم فقط کافیه textField تو این کلاس رو به TLFTextField تبدیل کنیم.
(داخل پرانتز هم بگم که TLFtextfiled همون tlf خودمونه که که متدها و متغیرهاش شبیه Classic TextFiled هست با این تفاوت که همه قابلیتهای tlf رو داره) حالا برای اصلاح این کامپوننت کافیه این 2 خط رو تغییر بدیم
PHP:
public var textField:TLFTextField;
override protected function configUI():void {
....
textField = new TLFTextField();
...
}
کار تقریبا تموم شده اما یه مشکل کوچیک هست اون اینه که direction تبدیل به rtl نمیشه تو این حالت واست این کار هم کافیه این متغیر رو زمانی که کنترلر فرمت دهی میشه ست کنیم یعنی تو این تابع :
PHP:
protected function drawTextFormat():void {
...
textField.direction = 'rtl'
...
}
کار تموم شد الان کنترلر کاملا از TLF پشتیبانی میکنه
اما کنترلر List ، برای اینکه این کنترلر رو اصلاح کنیم به طور مستقیم نمیشه این کار رو انجام داد دلیلش هم اینه که این کنتلر جزوه کنترلرهای ListBase هست مثل Datagrid Combobox , و غیره یعنی اینا از یک کلاس واسه نمایش همه چی استفاده میکنن که اسمش CellRenderer هست یعنی ایتمهایی که اضافه میشه هر کدوم به عنوان یک سلول محسوب شده و یه حالتی شبیه به کنترلر Button دارن ، در کلاس Cellrenderer همونطور که گفته شده هر ایتم به عنوان یک LabelButton شناخته میشه که اساس هر کنترلر ListBase رو تشکیل میدن حالا کافیه که برای اصلاح کنترلر List کلاس LabelButton رو اصلاح میکنیم برای این کار هم کافیه همون کارهارو که تو کلاس TextInput انجام دادیم تو این کلاس هم انجام بدیم یعنی TextField رو به TLFTextField تبدیل کنیم به این صورت :
PHP:
public class LabelButton extends BaseButton implements IFocusManagerComponent {
public var textField:TLFTextField;
....
PHP:
override protected function configUI():void {
...
textField = new TLFTextField();
...
واسه حالت RTL هم کافیه این خط رو اضافه کنیم :
PHP:
protected function drawTextFormat():void {
...
textField.direction = 'rtl';
تموم شد اینم از کنترلر List که برای نمایش متون از TLF استفاده میکنه
اما تو کنترلهای دیگه هم روال همینه با اصلاح LabelButton خوبخود کنترلهایی که از این کلاس استفاده میکنن هم اصلاح میشن مثل DataGrid , ComboBox یه سمپل هم گذاشتم تا خروجی رو مشاهده کنید
این نکته رو بگم خودم این روش رو توصیه نمیکنم چون به اندازه کافی خود این کنترلرها سنگین هست و اگه TLF رو هم بهشون اضافه کنید دیگه پرفرمانس پروژتون خیلی میاد پایین.
در اخر یه فریمورک واستون معرفی میکنم که همون کنترلهای فلش رو ارائه میده اما بازدهی کار پایین نمیاد طوری که حتی تو پروژهایی که واسه موبایل میزنین هم میتونین ازش استفاده کنید.