[حل شده] مشکل جدیدی با فرستادن و گرفتن اطلاعات در native windows ادوب ایر

شروع موضوع توسط r.miri19 ‏29 اکتبر 2013 در انجمن Action Script 3

  1. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    با سلام
    من یک فایل دریت کردم
    که در روت آن 3 تا دکمه هست و یک تکست باکس به نام test1
    2 تا مووی کلیپ به نامهای pan1 و pan2 که در هر کدام از این ها نیز 3 دکمه و یک تکست باکس موجود است (فایل اتچ شده است)

    در روت دکمه بالایی وظیفه درست کردن صفحه جدید از مووی کلیپ pan1 را دارد
    ####دکمه شماره 2 و 3 وظیفه مقدار دادن به تکست باکس موجود در pane1 و pane2 را دارد که هر کاری کردم نشد

    ####در pan1 دکمه شماره 1 وظیفه مقدار دادن به تکست باکس موجود در روت را دارد که هر کاری کردم نشد
    در pan1 دکمه شماره 2 وظیفه درست کردن پنجره جدید از pane2 را دارد که درست کار می کند.
    ####در pan1 دکمه شماره 3 وظیفه مقدار دادن به تکست باکس موجود در pane2 را دارد که هر کاری کردم نشد

    ####در pan2 دکمه شماره 1 وظیفه مقدار دادن به تکست باکس موجود در روت را دارد که هر کاری کردم نشد
    در pan2 دکمه شماره 2 وظیفه درست کردن پنجره جدید دارد که کار می کند.
    ####در pan2 دکمه شماره 3 وظیفه مقدار دادن به تکست باکس موجود در pane1 را دارد که هر کاری کردم نشد

    فایل فلش رو نگاه کنید کامنت گذاشتم.

    جلوی عباراتی که #### وجود دارد من مشکل دارم.

    در حالت کلی نمی شه ارتباطی بین پنجره های در ادوب ایر به وجود آمده اند برقرار کرد مثلا از پنجره دوم مقدار تکست باکس موجود در روت و برعکس رو انجام داد.چطور می شه ارتباط داد؟
     

    پیوست ها:

    • 01.rar
      اندازه فایل:
      کیلوبایت 946.2
      نمایش ها:
      32
    نوشته شده توسط r.miri19 در ‏29 اکتبر 2013
  2. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    خبرگان فلش لطفا کمک :sad:
     
    نوشته شده توسط r.miri19 در ‏1 نوامبر 2013
  3. spryboy

    spryboy کاربر فعال

    ارسال‌ها:
    155
    تشکر شده:
    199
    امتیاز دستاورد:
    16
    سلام

    مشکل شما ربط چندانی به پنجره ها نداره.
    1
    شما باید برنامه تون رو طوری بنویسید که قسمت های مختلف کدتون در صورت لزوم در دسترس (دید) بخشهای دیگه باشه. مثلا در کد موجود در روت، اگر تعریف متغیر page رو به بیرون فانکشن open_win منتقل کنید، در ایونت لیسنر btn_UP2، میتونید به سادگی با استفاده از page.test1.text مقدار تکست پن1 رو تغییر بدید.
    یعنی به جای
    [JSS]
    function open_win(ev:MouseEvent):void {
    .
    .
    .
    var page:MovieClip = new pan1();//تعریف متغیر در داخل فانکشن
    .
    .
    }
    [/JSS]
    کدتون رو به این شکل بنویسید
    [JSS]
    var page:MovieClip;//تعریف متغیر رو به بیرون فانکشن منتقل کردیم
    function open_win(ev:MouseEvent):void {
    .
    .
    .
    page = new pan1();
    .
    .
    }[/JSS]

    برای دسترسی به روت از داخل پن1، میتونید یک متغیر، مثلا به اسم refToRoot، با دیتاتایپ MovieClip تعریف کنید و اون رو در کد روت مقدار دهی کنید.
    [JSS]
    var refToRoot:MovieClip;//این متغیر رو در کد موجود در پن1 تعریف میکنیم
    [/JSS]
    [JSS]
    var page:MovieClip;
    function open_win(ev:MouseEvent):void {
    .
    .
    .
    page = new pan1();
    page.refToRoot = this;//یک ارجاع به روت رو در متغیر ذخیره میکنیم
    .
    .
    }[/JSS]

    بعد میتونید در پن1 از طریق این متغیر به پراپرتی های روت دسترسی داشته باشید. مثلا:
    [JSS]
    refToRoot.test1.text = 'Changed by PAN1';
    [/JSS]
    برای ارتباط بین پن1 و پن2 هم میتونید به همین روش عمل کنید.

    ------------------------------------------------------
    2
    روش دوم و ساده تر، اینه که متغیرهای گلوبال تعریف کنید، و در موقعیت های مناسب درون برنامه تون، یک رفرنس به روت، پن1 و پن2 در این متغیرها ذخیره کنید. من یک نمونه براتون آماده کردم و چون روند کار مشخصه، دیگه توضیح نمیدم. در نمونه ای که من آماده کردم، در کدهای اولیه ی شما هیچ تغییری ندادم و فقط این متغیرها رو مقدار دهی یا از اونها استفاده کردم. از یک کامنت بشکل یونیفرم استفاده کردم تا کدهای من رو بتونید راحت تشخیص بدید. به وجود کلاس Refs در کنار فایل FLA هم دقت کنید.

    ------------------------------------------------------
    3
    تا اینجا ما کاری با APIهای مختص به ایر نداشتیم. اما اگر بخواید پیچش کارتون زیاد بشه، میتونید با استفاده از پراپرتی openedWindowsـــه آبجکت nativeApplication، به پنجره های باز برنامه دسترسی داشته باشید. این پراپرتی یک آرایه از آبجکتهای nativeWindowـــه پنجره های باز رو برمیگردونه و از طریق دسترسی به nativeWindowـــه یک پنجره، میتونید به stage اون پنجره دسترسی داشته باشید. مثلا میتونید برای دسترسی به stageـــه پنجره اصلی از این کد استفاده کنید.
    [JSS]
    NativeApplication.nativeApplication.openedWindows[0].stage
    [/JSS]


    ------------------------------------------------------
    من به سایر جنبه های کدهای شما کاری نداشتم و اشکالات موجود رو بر طرف نکردم.

    موفق باشید
     

    پیوست ها:

    آخرین ویرایش: ‏2 نوامبر 2013
    نوشته شده توسط spryboy در ‏2 نوامبر 2013
    BehrouzPc، ++Hadi++، r.miri19 و یک نفر دیگر از این ارسال تشکر کرده اند.
  4. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    با تشکر از آقای spryboy
    می شه یه مثال عملی از

    NativeApplication.nativeApplication.openedWindows[0].stage

    بزنید.ممنونم
     
    نوشته شده توسط r.miri19 در ‏2 نوامبر 2013
  5. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    هدفتون چی هست از این دستور ؟
     
    نوشته شده توسط ++Hadi++ در ‏12 نوامبر 2013
    r.miri19 از این پست تشکر کرده است.
  6. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    آقا هادی می خوام باش بین native windows ها ارتباط برقرار کنم
    آقای spryboy گفتن که میشه اما این چند روزه که تو فروم نیست منم یه خورده عجله دارم .
    مثلا یک متغییر به نام hadi که در openedWindows[0] هست که همان پنجره اصلی هست را در پنجره های دیگر بخوانم (در openedWindows[1] یا openedWindows[2] )
    یا مثلا متغییر به نام hadi که در openedWindows[1] هست را در پنجره های دیگر بخوانم (در openedWindows[0] یا openedWindows[2] )
     
    نوشته شده توسط r.miri19 در ‏12 نوامبر 2013
  7. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    آخرین ویرایش: ‏12 نوامبر 2013
    نوشته شده توسط ++Hadi++ در ‏12 نوامبر 2013
    r.miri19 و spryboy از این پست تشکر کرده اند.
  8. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    ممنون که جواب دادید.اما این خیلی پیچیده میشه.
    فرض کنید من 6 تا native windpws دارم که همش در ارتباط هستند و چیزهای مختلف به همدیگر میخوان پاس بدند.بهترین راه همان openedWindows هست که راحت بشه باش از ویندوز موزد نظر متغییر و تابع ها رو لود کرد و با خواند.
    اما نمی دونم این دستور چرا هیچ کار نمیکنه .مگه این دستور

    NativeApplication.nativeApplication.openedWindows[0].stage
    نباید بعد از stage نام متغییر با تابع بیاید و کار کند؟
     
    نوشته شده توسط r.miri19 در ‏12 نوامبر 2013
  9. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    انشاءال... در سریعترین حالت ممکن تا آخر این هفته سعی می کنم رسیدگی کنم...
     
    نوشته شده توسط ++Hadi++ در ‏12 نوامبر 2013
    r.miri19 و spryboy از این پست تشکر کرده اند.
  10. spryboy

    spryboy کاربر فعال

    ارسال‌ها:
    155
    تشکر شده:
    199
    امتیاز دستاورد:
    16
    سلام

    ببینید، بهترین کار اینه که بجای نوشتن کدهاتون بصورت پراکنده، همه ی اونها رو در یک فریم یا یک سورس کد بنویسید، تا درگیر این مشکلات و پیچیدگیها نشید. من یک نمونه براتون آماده کردم و اسم فایلش رو All_In_One گذاشتم. همون کدهای خودتون رو آوردم داخل روت. همونطور که میبینید تمام آبجکتها و متغیرها بصورت خودجوش در دسترس هستند. من چیزی به کدها اضافه نکردم، فقط محل addEventListenerها رو تغییر دادم تا قبل از باز شدن پنجره ها، دکمه ها کار نکنند.

    اما در مورد openedWindows
    همونطور که در پست قبلیم گفتم، استفاده از این پراپرتی میتونه کارتون رو پیچیده کنه. دلیلش هم اینه که این آرایه، با باز و بسته شدن پنجره ها، آپدیت میشه. مثلا در مورد برنامه ی شما، اگر پنجره های روت، پن 1 و پن 2 به ترتیب باز بشن، به همون ترتیب هم، ایندکسهای آرایه رو به خودشون اختصاص میدن. حالا اگر بعد از باز شدن پن 2، پنجره ی پن 1 رو ببندیم، پن 2 از آیتم سوم(ایندکس [2] ) به آیتم دوم (ایندکس [1]) منتقل میشه. بنابراین نمیشه مستقیما بوسیله ی ایندکسهای آرایه از اونها استفاده کرد. از طرف دیگه پنجره ها مشخصه ی منحصر به فردی هم ندارند که بتونیم عناصر آرایه رو نسبت به اون مشخصه چک کنیم. به این دلایل معمولا از openedWindows فقط بر ارتباط با پنجره ی اصلی که در ایندکس [0] قرار میگیره استفاده میکنند. اما یک راه حلی که خودم هم از اون استفاده میکنم(البته خیلی به ندرت لازم میشه)، استفاده از title پنجره هاست. لازمه ی این روش هم، اینه که هر پنجره (حداقل پنجره هایی که میخوایم باهم در ارتباط باشن)، یک title منحصر به فرد داشته باشه تا بوسیله ی اون بتونیم آیتم مورد نظرمون رو تو آرایه پیدا کنیم. من یک نمونه از برنامه تون رو با این روش و با استفاده از یک کلاس خیلی ساده و کوچک بنام GetReference، آماده کردم. چون این کلاس بخشی از یک کلاس دیگه س که ما برای کارهای خودمون نوشتیم، خیلی جنرال نیست و شرایط مختلف رو پیاده سازی نکردیم. مثلا مشخص نکردیم که، اگر پنجره ای با title داده شده رو پیدا نکرد، چیکار کنه، بنابراین اگر میخواید ازش استفاده کنید، دقت کنید که titleها رو درست تایپ کنید. اسم فایل FLAـــه این نمونه رو first_win_openedWins گذاشتم. کلاس GetReference سه تا متد بنام های
    getNativeWindow و getStage و getContent داره که به ترتیب آبجکتهای nativeWindow و stage و main_timelineـــه پنجره رو برمیگردونند. این متدها رو بصورت static تعریف کردیم تا همه جا به راحتی در دسترس باشن. برای استفاده از این متدها باید titleـــه پنجره ی مورد نظرتون رو بعنوان آرگومان این متدها وارد کنید. اگر آرگومانی وارد نکنید، بصورت پیش فرض آبجکتهای مربوط به پنجره ی اصلی رو بر میگردونند. توی فایل نمونه همه چیز مشخصه. البته توی این نمونه فقط از متد getContent استفاده کردم. دقت کنید که توی کدهای شما titleــــه پنجره های پن 1 و پن 2 رو تغییر دادم و بترتیب Pan1 و Pan2 گذاشتم.

    موفق باشید
     

    پیوست ها:

    نوشته شده توسط spryboy در ‏12 نوامبر 2013
    ++Hadi++ و r.miri19 از این پست تشکر کرده اند.
  11. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    تشکرررررررررررررررررررررر .:oops::rose:
    خیلی لطف کردید که کمک کردید و وقت گذاشتید .من این یک ماه دنبال این کد بودم و خیلی ذهنم رو مشغول کرده بود.ممنونم که یادم دادید.:rose:
    از اقا هادی هم ممنونم که پیگیر بود و ما رو به حال خودم ول نکرد.آقا هادی بازم می گم یه دونه ایی :rose::green:
     
    نوشته شده توسط r.miri19 در ‏13 نوامبر 2013
    spryboy و ++Hadi++ از این پست تشکر کرده اند.
  12. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    مرسی از spryboy
    اگه مشکلتون حل نشد بگید پیگیر باشم چون به خاطر ایام محرم وقت نکردم پیگیر شم..
     
    نوشته شده توسط ++Hadi++ در ‏14 نوامبر 2013
    r.miri19 و spryboy از این پست تشکر کرده اند.
  13. r.miri19

    r.miri19 Member

    ارسال‌ها:
    68
    تشکر شده:
    15
    امتیاز دستاورد:
    6
    ممنونم آقا هادی ، حل شد.ممنون که به فکر ما هستی :rose:
     
    نوشته شده توسط r.miri19 در ‏16 نوامبر 2013

به اشتراک بگذارید