خانه » ادوبی فلش » جستجوی به ترتیب یک لغت در فیلد متنی

جستجوی به ترتیب یک لغت در فیلد متنی

در این مطلب نحوه جستجوی به ترتیب (مشابه Find Next) یک لغت در یک فیلد متنی و انتخاب این لغت آموزش داده می‌شود، به طوری که بعد از هر بار کلیک روی دکمه مربوط به Find Next لغت مورد نظر بعدی انتخاب می‌شود.

۱- ابتدا یک دکمه به نام find_next_btn، یک فیلد متنی به نام target_txt به عنوان فیلد متنی اصلی و یک فیلد متنی برای نوشتن کلمه مورد نظر جستجو به نام search_txt بسازید.

۲- ابتدا یک متغیر برای پیدا کردن اندیس بعدی و یک Event Listener برای دکمه Find Next می‌سازیم.

var i:Number = 0;
find_next_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

3- حالا تابعی را که بعد از کلیک روی دکمه فراخوانی می‌شود، تعریف می‌کنیم.

function fl_MouseClickHandler(event:MouseEvent):void
{
	target_txt.alwaysShowSelection = true;
	i = target_txt.text.indexOf(search_txt.text,i) + search_txt.length;
	target_txt.setSelection(i - search_txt.length, i);
	if (target_txt.text.indexOf(search_txt.text,i) < 0)
	{
		i = 0;
	}
}

در این تابع:

  • ابتدا با دستور alwaysShowSelection وضعیت نمایش ناحیه انتخاب شده را به صورت همیشه فعال تبدیل می‌کنیم تا حتی زمانی که Focus روی سایر اشیاست هم ناحیه انتخاب شده دیده شود.
  • مقدار i را برای پیدا کردن لغت بعدی آماده می‌کنیم. برای این کار طول رشته لغت مورد نظر را به اندیس پیدا شده اضافه می‌کنیم.
  • لغت مورد نظر را به کمک دستور setSelection روی target_txt نشان می‌دهیم.
  • در صورتی که اندیس آخرین لغت هم پیدا شد، به کمک دستور if جستجو را از ابتدا شروع می‌کنیم. در این دستور فرض شده است که بعد از آخرین لغت پیدا شده، مقدار ۱- برای دستور indexOf برگردانده شود.

 [به روز رسانی در ۲۴ مرداد ۱۳۹۳]

 

جایگزین setSelection در زمانی که فیلد متنی TLF می باشد :

هر چند که setSelection در TLF هم عملکرد دارد ولی در زمانی که از خصوصیت توسعه ای TLF استفاده کنید، این خصوصیت عملکردش درست نخواهد بود و فقط در بخش اولیه عملکرد دارد. همان طور که می دانید در TLF این امکان وجود دارد که شما یک باکس متنی ایجاد کنید و آن را توسعه دهید و همین فیلد را به صورت ادامه دار در بخش های مختلف صفحه قرار دهید در این حالت شما یک فیلد پیوسته دارید که در بخش های مختلف قرار دادید ولی در کل یک محتوا در آن وارد می شود و به صورت خودکار در بخش های آن قرار می گیرد. در این حالت setSelection فقط در بخش اول جواب می دهد و برای ادامه بخش های کاربردی ندارد.

راه حل این موضوع از خصوصیت selectRange از کلاس EditManager  می باشد که به صورت اختصاصی برای TLF آماده شده است.

نحوه استفاده از این کلاس به صورت زیر می باشد:

import flashx.textLayout.edit.EditManager;

target_txt.textFlow.interactionManager = new EditManager();

var i:Number = 0;
find_next_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
	target_txt.alwaysShowSelection = true;

	i = target_txt.text.indexOf(search_txt.text,i) + search_txt.length;

	target_txt.textFlow.interactionManager.selectRange(i - search_txt.length, i);
	target_txt.textFlow.interactionManager.setFocus();

	if (target_txt.text.indexOf(search_txt.text,i) < 0)
	{
		i = 0;
	}

}

این روش به صورت اختصاصی می بایست برای TLF استفاده شود و با توجه به این که اختصاصی برای TLF نوشته شده است با همه خصوصیات آن سازگاری دارد.

 

موفق و پیروز باشید

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

14 نظر

  1. سلام
    من در پروژه ام نیاز به کد جستجویی دارم که در فایل فلش کار بزارم و بره مطلب مورد جستجو را که از طریق فیلد متنی جستجو که در اختیار کاربر قرار داره از فایل xml پیدا کنه و لود کنه.
    یعنی یه دکمه در کنار فیلد متنی که کاربر از طریق اون امکان جستجو رو داره و کاربر پس از نوشتن مطلب مورد نظر و کلیک بر روی دکمه برنامه بتونه محتوای مورد نظر که هم میتونه متن باشه هم میتونه عکس باشه و یا فیلم رو از فایل xml استخراج کنه و به کاربر نمایش بده.

    • سلام
      شما می بایست با توجه به شرایط مورد نظرتان
      فایل xml را توسط یک حلقه مثلا for پیمایش کنید و نتایج را در قالب یک آرایه ذخیره کنید سپس بازیابی کرده و نمایش دهید
      موفق و پیروز باشید

      • سلام
        با تشکر از توجه تان
        راستش اونقدرا هم بلد نیستم
        اگه ممکنه مبتدیانه تر توضیح بدین ممنون میشم
        یا اینکه کدها رو برام بنویسین
        با تشکر فراوان

  2. باسلام
    من یک کتاب با as3 و xml ساختم. صفحات کتابم swf هست که اول pdf بودن و اونارو به swf نبدیل کردم
    حالا میخوام در کتاب search کنم. البته به فارسی. یه کلمه فارسی بدم برام سرچ کنه.
    راهنماییم کنید.
    ممنون

    • سلام
      برای هر صفحه محتوای آن یا کلمات کلیدی آن را در فایل xml قرار دهید و در واقع در آن جستجو کنید و نتیجه جستجو را صفحه مربوط هه کلمه کلیدی مربوطه نمایش دهید
      موفق و پیروز باشید

  3. سلام استاد.
    واقعا ممنون، مطلب بسیار مفیدی بود.
    فقط یه مشکل: در فلش امکانی هست که متن های tlf رو به هم می چسبونه و اگه یه متن طولانی باشه میتونیم ادامش رو در فیلد مرتبط شده ی بعدی نمایش بدیم.
    من دو تا فیلد متن داشتم و اون ها رو با هم مرتبط کردم.با این کار کد بالا فقط کلمه ی پیدا شده در فیلد اول رو نشون میده!!!
    منتظرم.بی نهایت سپاس!

  4. سلام.نمونه ارسال شد.

  5. با سلام
    امکانش هست که بشه با این برنامه به فریم های دیگر هم منتقل شد؟ من یک پروژه دارم که باید فیلد جستجو داشته باشم و در فریم های مختلف متن های TLF دارم . میشه با جستجوی یک کلمه به یک فریم دیگر رفت؟ و متن مخصوص اون فریم رو نمایش داد؟
    با تشکر

    • سلام و عرض ادب

      برای این کار می توان روش های مختلفی را در نظر گرفت، به طور مثال متون را درون یک آرایه قرار دهید به طوری که مثلا مورد مربوطه به صفحه اول در اولین ایندکس آرایه قرار می دهید، حال جستجو را در این آرایه انجام می دهید اگر متن در هر عضو این آرایه بود طبق الگویی که در نظر گرفته اید به فریم مربوطه به آن می روید

      با این کار در حلقه ی for که با آن در آرایه جستجو می کنید وقتی به ایندکس موردی که شامل داده هست می رسد، با استفاده از این داده عددی می توان به فریم مورد نظر انتقال دهید.

      حال اگر در آن فریم بخواهید جستجویی در فیلد متنی داشته باشید، می توانید از الگوی این مطلب استفاده کنید و در متن آن TLF جستجو کنید.

      موفق و پیروز باشید

  6. با سلام
    ضمن تشکر از ارائه مطالب عالی ومفیدتان ،بنده قصد دارم یک ویرایشکر ساده و شخصی برای فرمولهای ریاضی با اکشن اسکریپت۳ بسازم لطفا راهنمایی کنید.

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه