اطلاعیه

Collapse
No announcement yet.

چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

    سلام دوستان.
    من emWIN رو با RTX تو کیل راه انداختم. اما حالا یه گیری پیدا کردم.
    ببینید وقتی من با استفاده از برنامه gui builder یک window درست می کنم و تو برنامه اضافه می کنم اول اون تابع اجرا شده و صفحه طرراحی شده تو نرم افزار بالا میاد وقتی که میخام مثلا با استفاده ا زوقفه RTC بیام و ساعت رو توی این پنجره نشون بدم (یک text براش کنار گذاشتم تو window) نمیشه !!! یعنی اصلا انگار نمی تونم تو پنجره چیزی رو رسم کنم (با استفده از توابع graphic api). باید روش خاصی رو پیاده کنم تا بتونم با استفده از gui builder پنجره (یا صفحه ای ) رو بسازم که تو توابع دیگه (یا تسک های دیگه) بتونم دستکاریش کنم ؟
    یا اینکه چطور به emwin بفهمئنم که باید مثلا الان یک پنجره دیگه رو نشون بده؟
    ممنون.
    ---------
    .
    .
    ...........

    #2
    پاسخ : چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

    سلام. شما نی*تونید در حالت عادی روی پنجره اشکال گرافیکی رسم کنید.
    برای این کار باید در تابع callback پنجره*تون توابع رسم رو پیاده سازی کنید (در ID بربوط به paint).
    اگر این کار رو انجام بدین یک بار اشکال گرافیکی مد نظرتون رسم می*شه ولی فقط یک بار.
    برای رسم مجدد باید اون قسمت از پنجره رو با کمک توابع invalidate مربوط به WM_ رفرش کنید.

    دیدگاه


      #3
      پاسخ : چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

      شما از هر جای برنامه دسترسی داری که محتویات نمایش روی gui رو تغییر بدید. برای مثال میخواید ساعت رو روی یک text که قبلا ایجادش کردید بریزید

      WM_HWIN hItem;
      WM_HWIN main_page;

      main_page=CreateWindow();
      sprintf(b,"Time: %d-%d-%d ", time.tm_hour, time.tm_min, time.tm_sec);

      hItem = WM_GetDialogItem(main_page , (GUI_ID_USER + 0x08));
      TEXT_SetText(hItem, b);



      که GUI_ID_USER + 0x08 برابر با id همون text هست توی همون صحفه gui که الان داره نشونش میده و main pageهم در اینجا یک متغیرر هست که ادرس صفختون هست و فقط موقع ساخت صفحه یه بار توی یه متغییر گلوبال ذخیره کنید. تا برای تغییرات توی صحفه داشته باشینش
      حالا اگه خواستید صفحرو به کل عوض کنید برای مثال میخوام به صفحه منو برم به صفحه تنظیمات ساعت ابتدا صفحه قبل رو پاک میکنم و سپس صفحه جدید رو ایجاد و پوینترش رو هم برای تغییراتی که لازم دارم ذخیره میکنم

                      WM_DeleteWindow(pMsg->hWin);
      main_page= Createclock_set();
      [FONT=Yekan]
      [/FONT]



      در ضمن شما به همین روش در وسط برنامه و حتی توی یه فانکشن مثل اینتراپت همینطور که میتونید محتوای نمایش رو تغییر بدید میتونید حتی widget جدید تعریف کنید و ازش استفاده کنید

      توضیحات تکمیلی رو در داکیمنت emwin بخونید کامل توضیح داده


      جدیدترین ویرایش توسط hunybal; ۱۵:۱۸ ۱۳۹۶/۰۹/۱۲.

      دیدگاه


        #4
        پاسخ : چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

        نوشته اصلی توسط hunybal نمایش پست ها
        شما از هر جای برنامه دسترسی داری که محتویات نمایش روی gui رو تغییر بدید. برای مثال میخواید ساعت رو روی یک text که قبلا ایجادش کردید بریزید

        WM_HWIN hItem;
        WM_HWIN main_page;

        main_page=CreateWindow();
        sprintf(b,"Time: %d-%d-%d ", time.tm_hour, time.tm_min, time.tm_sec);

        hItem = WM_GetDialogItem(main_page , (GUI_ID_USER + 0x08));
        TEXT_SetText(hItem, b);



        که GUI_ID_USER + 0x08 برابر با id همون text هست توی همون صحفه gui که الان داره نشونش میده و main pageهم در اینجا یک متغیرر هست که ادرس صفختون هست و فقط موقع ساخت صفحه یه بار توی یه متغییر گلوبال ذخیره کنید. تا برای تغییرات توی صحفه داشته باشینش
        حالا اگه خواستید صفحرو به کل عوض کنید برای مثال میخوام به صفحه منو برم به صفحه تنظیمات ساعت ابتدا صفحه قبل رو پاک میکنم و سپس صفحه جدید رو ایجاد و پوینترش رو هم برای تغییراتی که لازم دارم ذخیره میکنم

                        WM_DeleteWindow(pMsg->hWin);
        main_page= Createclock_set();
        [FONT=Yekan]
        [/FONT]



        در ضمن شما به همین روش در وسط برنامه و حتی توی یه فانکشن مثل اینتراپت همینطور که میتونید محتوای نمایش رو تغییر بدید میتونید حتی widget جدید تعریف کنید و ازش استفاده کنید

        توضیحات تکمیلی رو در داکیمنت emwin بخونید کامل توضیح داده


        ممون از جوابت.
        پس من می تونم چند تا متغیر گلوبال تعریف کنم از نوع WM_HWIN و بعد ازشون تو کل برنامه استفاده کنم؟
        حالا فرض کنید من تو یک تسک میخام مقدار ساعت رو عوض کنم، کافیه که تو اون تسک این تک کد رو بزارم؟
        کد:
        sprintf(b,"Time: %d-%d-%d  ", time.tm_hour, time.tm_min, time.tm_sec);[COLOR=#28282B][FONT=Consolas]         [/FONT][/COLOR]
        [COLOR=#28282B][FONT=Consolas]     hItem = WM_GetDialogItem(main_page , (GUI_ID_USER + 0x08));[/FONT][/COLOR]
            TEXT_SetText(hItem, b);
        این تیکه کد معروف کارش چیه و آیا باید همیشه ازش استفاده کنیم؟
        [FONT=Yekan]void M_GUI_Task(void)[/FONT]{
        while(1)
        {
        GUI_Exec();
        WM_Exec();
        GUI_X_Delay(1);
        }

        [FONT=Yekan]}[/FONT]
        ---------
        .
        .
        ...........

        دیدگاه


          #5
          پاسخ : چطور میشه داخل تسک با RTX و emWIN پنجره یا صفحه رو دستکاری کرد؟

          بله شما این متغییر رو استفاده کنی هرجا میتونی توی صفحت تغییر ایجاد بدی فرقی نداره

          این تیکه کدی هم که گذاشتید بسیار مهم هست که همیشه اجرا بشه.
          در اصل شما تمامی تغیراتی رو که توی صفحه ایجاد میکنید در حافظه استک gui که از پیش تعریف شده ذخیره میشود و در زمان اجرای دستور GUI_Exec(); عملی و قابل مشاهده میشود

          یعنی شما ساعتتون که تغییر کرد و مقدار text رو عوض کردید ، تا زمانی که GUI_Exec یک بار اجرا نشود مقدار جدید رو نمیبینید
          پس بدیهی هست که این خط کد توی یک تسکی جدا یا یه جایی که مدام اجرا مشود قرار داده شود تا تمامی تغییراتی رو که توی widget ها اعمال میکنید به صورت realtime بتونید ببینید

          دیدگاه

          لطفا صبر کنید...
          X