اطلاعیه

Collapse
No announcement yet.

ایجاد منو در کدویژن

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

    ایجاد منو در کدویژن

    سلام و خسته نباشید

    من راجع به این موضوع توی این تالار گشتم ولی نتیجه ای حاصل نشد

    میشه بگید چه طور منوهای تو در تو بسازم؟
    و زمانی که روی یک منو اینتر زده شده چه طور یه فرمان اجرا بشه؟

    برنامه نویسی با کدویژن

    #2
    پاسخ : ایجاد منو در کدویژن

    دوستان اگه آدرس تاپیکی که در مورد این موضوع بحث کرده بدبد ممنون میشم

    دیدگاه


      #3
      پاسخ : ایجاد منو در کدویژن

      سلام دوست عزیز
      من هم چین کاری انجام دادم به این ترتیب که منو و زیر منوها را بصورت یک درخت رسم کردم و یک متغیر در نظر گرفتم که نشان می دهد کجای منو هستیم و سپس با if else های تودر تو با توجه به متغیر و ذکمه ی فشرده شده تصمیم گیری کردم البته این جوری خیلی تو در تو شد

      دیدگاه


        #4
        پاسخ : ایجاد منو در کدویژن

        میتونی کدت رو برام بزاری
        تا من یه آشنایی باهاش پیدا کنم

        ممنون میشم

        دیدگاه


          #5
          پاسخ : ایجاد منو در کدویژن

          من قبلا برای یکی از دوستان در همین فروم به زبان مزخرف بسکام کدی نوشتم. مسلما در C راحتتره. ولی برای نمایش ایده کلی. اینم کدش:


          Declare Function MenuReadInt(ByVal W As Word) As Integer
          Declare Function MenuReadItem(ByVal W As Word, ByVal N As Byte, Choice As Integer ) As String
          Declare Sub MenuRun(ByVal Choice As Integer)

          Call HandleMenu(LoadLabel(MainMenu))

          End

          Sub MenuRun(ByVal Choice As Integer)
          Select Case Choice
          Case Choice = 1: HandleMenu(LoadLabel(FileMenu))
          Case Choice = 2: Edit()
          Case Choice = 3: HandleMenu(LoadLabel(FormatMenu))

          Case Choice = 6: NewFile()
          Case Choice = 7: OpenFile()
          End Select
          End Sub


          Sub HandleMenu(Dim MenuData As Word)
          Dim nItems As Byte
          Dim nCur As Byte
          Dim I As Integer
          Dim Temp As Integer
          Dim Choice As Integer

          nCur = 1
          nItems = MenuReadInt(MenuData)
          Do
          For I=1 To nItems
          If I = nCur Then
          Temp = 1
          Else
          Temp = 0
          End If
          Lcdat I, 1, ReadMenuItem(MenuData, I, Choice), Temp
          Temp = GetKey()
          Select Case Temp
          Case Key = Up:
          If nCur = 1 Then nCur = nItems Else nCur = nCur - 1
          Case Key = Down:
          If nCur = nItems Then nCur = 1 Else nCur = nCur + 1
          Case Key = Enter
          MenuRun( Choice )
          End Select
          Next I
          Loop
          End Sub

          Function MenuReadInt(ByVal W As Word) As Integer
          Dim Result As Integer

          Result = CPeek(W)
          Result = Result + (CPeek(W+1)*256)

          ReadInt = Result
          End Function

          Function MenuReadText(ByVal W As Word, ByVal N As Byte, Choice As Integer) As String
          Dim nItems As Integer
          Dim I As Integer
          Dim C As Byte
          Dim Result As String

          nItems = ReadInt(W)
          W = W + 2
          Result = ""
          For I = 1 To N
          Do
          C := CPeek(W)
          W = W + 1
          If C = 0 Then
          Choice = ReadInt(W)
          W = W + 2
          Exit Do
          End If
          Result = Result + Chr(C)
          Loop
          Next I
          MenuReadText = Result
          End Function

          MainMenu:
          Data 5
          Data "File", 1
          Data "Edit", 2
          Data "Format", 3
          Data "View", 4
          Data "Help", 5

          FileMenu:
          Data 4
          Data "New", 6
          Data "Open", 7
          Data "Save", 8
          Data "Save as...", 9



          دیدگاه


            #6
            پاسخ : ایجاد منو در کدویژن

            دوست عزیز میتونی یه سمپل از خود کدویژن بزاری؟

            دیدگاه


              #7
              پاسخ : ایجاد منو در کدویژن

              دوستان یکی کمک کنه لطفا!!!!!!!!!!!!!!!!!!
              :redface:

              دیدگاه


                #8
                پاسخ : ایجاد منو در کدویژن


                #include <mega16.h>

                #define dim(x) (sizeof(x)/sizeof((x)[0]))

                #define UP 0
                #define DOWN 1
                #define HOME 2
                #define END 3
                #define ENTER 4
                #define ESCAPE 5

                typedef flash struct
                {
                flash char *str;
                unsigned short id;
                }menu_item_t;

                typedef flash struct
                {
                int x;
                int y;
                flash menu_item_t *items;
                int count;
                }menu_t;

                enum
                {
                IDM_FILE,
                IDM_EDIT,
                IDM_FORMAT,
                IDM_VIEW,
                IDM_HELP,
                IDM_LOAD,
                IDM_NEW,
                IDM_SAVE
                };

                static flash menu_item_t main_menu_items[]=
                {
                {"File", IDM_FILE },
                {"Edit", IDM_EDIT },
                {"Format", IDM_FORMAT},
                {"View", IDM_VIEW },
                {"Help", IDM_HELP }
                };

                static flash menu_t main_menu=
                {
                0,
                0,
                main_menu_items,
                dim(main_menu_items)
                };

                static flash menu_item_t file_menu_items[]=
                {
                {"Load", IDM_LOAD},
                {"New", IDM_NEW },
                {"Save", IDM_SAVE}
                };


                static flash menu_t file_menu=
                {
                0,
                1,
                file_menu_items,
                dim(file_menu_items)
                };

                void show_menu(flash menu_t *menu);

                ////
                void edit_file(void)
                {
                //....
                }

                void handle_menu(unsigned short id)
                {
                switch(id)
                {
                case IDM_FILE:
                show_menu(&file_menu);
                break;
                case IDM_EDIT:
                edit_file();
                break;
                case IDM_FORMAT:
                break;
                case IDM_VIEW:
                break;
                case IDM_HELP:
                break;
                case IDM_LOAD:
                break;
                case IDM_NEW:
                break;
                case IDM_SAVE:
                break;
                }
                }

                void show_text(int x, int y, flash char *str, int selected)
                {
                // ....
                x = x;
                y = y;
                str = str;
                selected = selected;
                }

                int getkey(void)
                {
                return 0;
                }

                void show_menu(flash menu_t *menu)
                {
                int i;
                int active = 0;

                for(;
                {
                // refresh menu
                for(i=0; i<menu->count; i++)
                {
                menu_item_t flash *p = menu->items + i;
                show_text(menu->x, menu->y + i, p->str, (i==active)?1:0);
                }
                switch( getkey() )
                {
                case DOWN:
                if(active < (menu->count-1))
                active++;
                break;
                case UP:
                if(active > 0) active --;
                break;
                case HOME:
                active = 0;
                break;
                case END:
                active = menu->count-1;
                break;
                case ENTER:
                handle_menu((menu->items + active)->id);
                break;
                case ESCAPE:
                return;
                }
                }
                }

                void main(void)
                {
                show_menu( &main_menu );
                }


                این یک نمونه کوچیک هست. ولی هر چی جون به جونش کردم سر یک خط گیر میده. و بنظر میاد ضعف cv باشه. ببینین خودتون میتونین کاریش کنین؟
                روال خوندن کلید و نوشتن متن منو روی صفحه رو به عهده خودتون گذاشتم.

                دیدگاه

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