الاثنين، ٢٠ يونيو ٢٠١١

Text Layout Framework الجزء الثامن

جعل النص قابل للتحديد أو التعديل

بالإضافه الى الإمكانيات القويه لل TLF وأدوات التنسيق الخاصه بها فإنك تستطيع أن تجعل المستخدم يتفاعل مع النص ، وذلك من خلال جعل النص قابل للتحديد فيستطيع المستخدم نسخ النص مثلا أو يمكن جعل النص قابل للتعديل فيستطيع المستخدم لصق أو مسح أو تعديل إو إضافة نص وذلك بإستخدام الفئات SelectionManager أو EditManager

خطوات جعل TLF قابل للتحديد

وذلك من خلال تخصيص الكائن SelectionManager الى خاصية interactionManager لكائن TextFlow

ActionScript 3
import flashx.textLayout.edit.SelectionManager;
mytextflow.interactionManager =  new SelectionManager();


"ط´ظƒط±ط§"



أمر  Import يحتوى على الكود الازم لل SelectionManager الذى يجعل TextFlow قابل للتحديد. فيستطيع المستخدم حينئذ تحديد ونسخ النص النص ولكن لايمكن التعديل فيه .



ونستطيع أيضا التعامل مع العديد الوسائل methods للكائن SelectionManager التى تتعامل مع وظائف إضافيه لعمل وتفعيل التحديد



خطوات جعل TLF قابل للتعديل



وذلك من خلال تخصيص الكائن EditManager الى خاصية interactionManager لكائن TextFlow




ActionScript 3


import flashx.textLayout.edit. EditManager;
mytextflow.interactionManager = new EditManager();


"ط´ظƒط±ط§"



أمر  Import يحتوى على الكود الازم لل EditManager الذى يجعل TextFlow قابل للتعديل. فيستطيع المستخدم حينئذ تحديد ونسخ ولصق ومسح وإضافة  النص .



ونستطيع أيضا التعامل مع العديد الوسائل methods للكائن EditManager  التى تتعامل مع وظائف إضافيه لعمل وتفعيل التحديد



تحديد انه يتعامل مع النص أم لا Focus



فى بعض الأحيان يعتبر من المفيد أن نستطيع تحديد متى يتفاعل المستخدم مع النص على Stage ، فإنه من الممكن أن تريد أن تعرف متى نضع مؤشر الفاره فى النص لعمل فعل ما أو تريد أن تعرف متى نترك النص .



يمكنك أن تحدد متى يتم التركيز على النص من خلال ترقب حدث FocusEvent.FOCUS_IN حيث يكون هناك كائن واحد فقط يمكن التركيز عليه سواء كان نص أو زر أو أى كائن على stage .



وينتهى التركيز عندما يضغط المستخدم مفتاح Tab أو يحرك الماوس لكائن أخر ويمكن أن نحدد عندما ينهى المستخدم التركيز على كائن ما وذلم بترقب الحدث FocusEvent.FOCUS_OUT



مثال : بفرض وجود كائن نص TLF وهذا النص قابل للتعديل ونريد إذا ضغط المستخدم بالفاره داخل النص يكتب “انت بداخل النص” وإذا ضغط خارجها يكتب “ انت بخارج النص”



ملحوظه : يفضل رسم مستطيل حول كائن النص TLF حتى نعرف مكانه




ActionScript 3


import flash.events.FocusEvent;   display.addEventListener(FocusEvent.FOCUS_IN,focusdetected);   function focusdetected (myevent:FocusEvent):void                 {                         trace ("انت بداخل النص");                 }                                                 display.addEventListener(FocusEvent.FOCUS_OUT,focusgone);   function focusgone (myevent:FocusEvent):void                 {                         trace ("انت بخارج النص");                 }


"ط´ظƒط±ط§"



* نستخدم أمر Import اللازم



* نكتب إسم كائن TLF متبوعا بالوسيله ()addEventListener لترقب حدث  FocusEvent.FOCUS_IN وعند حدوثه ينفذ الوظيفه focusdetected



* ننشئ الوظيفه focusdetected التى تستخدم أمر trace لعرض الرساله الموضحه



*



*



ثم نكرر نفس ماسبق ولكن مع حدث FocusEvent.FOCUS_OUT



 



image



معرفه ماتم تحديده (بداية ونهايه التحديد)



بالإضافه الى معرفة اذا كان تم التركيز  على النص أم لا focus فإنه يمكنك أن تكون ذو إمكانيات أكثر  بمعرفة معلومات حول المكان الذى حدده المستخدم فى النص .



الخطوات



* أوامر import لإستخدام SelectionManager أو EditManager



* ثم نستخدم الحدث SelectionEvent.SELECTION_CHANGE لتحديد عندما يقوم المستخدم بتحديد نص ما وعند حدوث هذا الحدث نستخدم selectionState.absoluteStart لتحديد بداية التحديد و selectionState.absoluteEnd لتحديد نهاية التحديد





ActionScript 3


import flashx.textLayout.edit.EditManager;
import flashx.textLayout.edit.SelectionState;
import flashx.textLayout.events.SelectionEvent;   mytextflow.interactionManager =new EditManager();     mytextflow.addEventListener(SelectionEvent.SELECTION_CHANGE, selectionChangedd);   function selectionChangedd(e:SelectionEvent):void
{    trace(e.selectionState.absoluteStart)//beginning position    trace(e.selectionState.absoluteEnd)//ending position
}


"ط´ظƒط±ط§"




بعض التوضيحات



SelectionEvent: حدث يتم إستدعائه فى كائن  TextFlow عندما يقوم EditManager أو SelectionManager يتغيير مايتم تحديده من النص .



كمثال : هذا الحدث لا ينفذ فقط عند تحديد جزء من النص بل أيضا عند تغيير التحديد بسبب ضغط المستخدم فى مكان أخر فى النص بالإضافه أيضا الى عندما يتم تغيير تنسيقات نص

هناك تعليق واحد:

Unknown يقول...

السلام عليكم
ارجوا من حضرتك ان تخبرنى لماذا لا يتم تنفيذ الكود الا بعد كتابة اثنين حرف c

right_btn.alpha = 0;
rong_btn.alpha = 0;

tlf.addEventListener(FocusEvent.FOCUS_IN,textInputHandler);
tlf.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut);

function textInputHandler(event:FocusEvent):void
{
//our textfield has focus, we want to listen for keyboard events.
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}

function textInputHandlerOut(event:FocusEvent):void
{
//our textfield lost focus, remove our listener.
stage.removeEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}

function keyDownHandler( e:KeyboardEvent ):void
{
//a key was pressed, check if it was Enter => charCode 13.
if (tlf.text == "post")
{
//ok, enter was pressed. Do your thing.
right_btn.alpha = 1;
rong_btn.alpha = 0;
}
else
{

rong_btn.alpha = 1;
right_btn.alpha = 0;
}

}

إرسال تعليق

 
;