اطلاعیه

Collapse
No announcement yet.

راهنمایی برای ساخت منو تو در تو به صورت حرفه ایی+ LCD گرافیکی

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

    راهنمایی برای ساخت منو تو در تو به صورت حرفه ایی+ LCD گرافیکی

    سلام به همه همونطور که عنوان معلومه می خوام بدونمم چه طور میشه یه منو و به صورت حرفه ایی ساخت یا برنامه اوونو نوشت
    هدف اینه که حداقل کد ایجاد کنه + اضافه کردن منو جدید راحت باشه

    فرض کنید یه دستگاه داریم که یه منو داره با 5 تا تب وقتی دکمه منو میزنیم میره به قسمت منو حالا اینجا 5 تا تب من می خوام وقتی با2 تا کلید بالا پایین که می کنیم اوون تب رنگ نوشته معکوس بشه

    چیزی که تو ذهنم بود و خواستم برنامه زیر بسازم اما هر چی می خوام کامل ترش کنم حجم کد بیشتر میشه
    می خوام بدونم روش اصولی و حرفه ایی واسه ساخت منو چیه ؟

    نمی دونم منو کامپیتور سمند دیدین یا نه یه چیز مثل اوون مد نظرمه !!


    کد:
    menu2:
    Select Case Zirmenu
    
     Case 1 : Negativ(1) = 1
    
     Case 2 : Negativ(2) = 1
    
     Case 3 : Negativ(3) = 1
    
     Case 4 : Negativ(4) = 1
    
     Case 5 : Negativ(5) = 1
    
    End Select
    
    
    Setfont Font8x8
    Lcdat 1 , 1 , "TEXT1" , Negativ(1)
    Lcdat 2 , 1 , "TEXT1" , Negativ(2)
    Lcdat 3 , 1 , "TEXT1" , Negativ(3)
    Lcdat 4 , 1 , "TEXT1" , Negativ(4)
    Lcdat 5 , 1 , "TEXT1" , Negativ(5)
    
    
    Debounce Bala , 0 , Up , Sub
    Debounce Paen , 0 , Down , Sub
    
    
    
    
    
    Down:
    Incr Zirmenu
    If Zirmenu > 5 Then Zirmenu = 5
    Return
    
    Up:
    Decr Zirmenu
    If Zirmenu > 5 Then Zirmenu = 1
    return
    { خلاف قوانین ، پاک شد }

    #2
    پاسخ : راهنمایی برای ساخت منو تو در تو به صورت حرفه ایی+ LCD گرافیکی

    البته نمیشه منو ها رو زیاد کرد بدون اینکه حجم کد تولیدی زیاد نشه. مشکل عمده شما اینه که میخوایین منو ها رو با کد بسازین. البته باید گفت هر روشی پیاده سازی کنین منوط به روش استفاده از منو هم میشه. اما بطور کلی من میام با یک تابع ثابت منو ها رو مدیریت میکنم و بعد شماره آیتمی رو که طرف انتخاب کرده به یک روتین ثابت پاس میکنم تا اون عمل مربوطه رو انجام بده. اینجوری فقط حجم داده مربوط به توصیف آیتم ها کم و زیاد میشه. البته در این مورد مقداری هم حجم استک نرم افزاری باید افزایش پیدا کنه و گرنه مشکلات دیگه ای پیش میاد. البته روش پیاده سازی این مسئله رو به این فرم توی بیسیک نمیدونم. من خودم با 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


    دیدگاه


      #3
      پاسخ : راهنمایی برای ساخت منو تو در تو به صورت حرفه ایی+ LCD گرافیکی

      آقا رضا تشکر من فک می کنم برنامه که شما گزاشتین همون کاریه که من می خواستم بکنم
      برنامه شما هم با توجه به تعداد آیتم ها حجم کمی نداره پس این روند اجتناب ناپذیره انگار

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

      مشکل عمده شما اینه که میخوایین منو ها رو با کد بسازین.
      { خلاف قوانین ، پاک شد }

      دیدگاه


        #4
        پاسخ : راهنمایی برای ساخت منو تو در تو به صورت حرفه ایی+ LCD گرافیکی

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

        اون جمله ای که عرض کردم به این خاطر بود که معمولا بیسیک کارها اغلب کارشون رو با کد نویسی انجام میدن و به ساختارهای برنامه نویسی و ساختارهای داده ای هیچ توجهی ندارن. حق هم دارن چون اغلب با این تیپ برنامه نوشتن کارشون راه افتاده. ولی اینجا با توجه به قیدی که شما گذاشتین یعنی:

        هدف اینه که حداقل کد ایجاد کنه + اضافه کردن منو جدید راحت باشه

        فکر میکنم این راه اگر بهترین نباشه؛ راه خوبیه.

        دیدگاه

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