اطلاعیه

Collapse
No announcement yet.

کلید undo در برنامه گرفتن عدد از کیبورد

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

    کلید undo در برنامه گرفتن عدد از کیبورد

    سلام دوستان
    در برنامه گرفتن عدد از کیبورد می خوام در صورت اشتباه وارد کردن عدد بوسیله یکی از کلیدهای کیبورد بتونم آخرین عدد وارد شده رو پاک کنم. یعنی یک کلید undo داشته باشم. مثلا اگه عدد 421 رو وارد کردم بتونم اونو اصلاح کنم و به 42 یا حتی 4 تبدیل کنم و ...
    این قابلیت رو واسه برنامه قفل رمز و ماشین حساب و... میخوام.
    برنامش رو هم با بسکام نوشتم. مرسی دوستان
    زنده بو دن را به بیداری بگذرانیم که سال ها به اجبار خواهیم خفت

    #2
    پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

    خوب اینکه کاری نداره. کلید ها رو قبل از پردازش در یک رشته نگهداری کن. و در صورت undo کردن آخرین کلید رو حذف کن.

    دیدگاه


      #3
      پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

      نوشته اصلی توسط blacktiger

      برنامش رو هم با بسکام نوشتم. مرسی دوستان
      چه کمکی از دست بقیه بر میاد
      برنامه اش رو هم که نوشتی
      اگه میخای بزارش اینجا بقیه هم استفاده کنن
      :mrgreen:


      اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

      دیدگاه


        #4
        پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد


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

        دیدگاه


          #5
          پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

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

          دیدگاه


            #6
            پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

            اگر آرایه ای که برای نگه داری هر رقم بکار گرفته اید را اسمش را Numarray بگذارید.
            و ثابت Sizearray حداکثر مقدار رقم قابل وارد کردن (اندازه آرایه ) باشد.
            با توجه به چیزی که آقا رضا گفتند فکر کنم این 3 تابع بتواند کمکتان کند
            از این 3 تابع می توانید برای وارد کردن رقم یا خارج کردن (حذف) آن از آرایه استفاده کنید
            هر بار که یک رقم را از ورودی (مثلا صفحه کلید) می گیرید از تابع Stack_push برای ذخیره داده ستفاده کن
            این تابع مثل عمل push در زبان های مثل اسمبلی انجام می دهد یعنی داده که بهش می دهیم را درون آدرسی که الان هستیم قرار می دهد و یکی به مقدار Posarray که نگه دارنده موقعیت اشارگر برای خواندن یا ذخیره داده است ، اضافه می کند.
            و از تابع stack_pop برابر خارج کردن آخرین عدد وارد شده از آرایه استفاده می شود کرد و یکی از موقعیت آرایه کم می کند
            پس بجای دستوری که برای ذخیره کردن رقم در آرایه مثلا array(i)=getkey() (array اسم آرایه، i بعنوان شمارنده، اندیس مکانی که باید در آرایه ذخیره شود را اعلام می کند و getkey هم تابعی که ورودی را می خواند) استفاده کردید از تابع stack_push(array,getkey) استفاده کنید
            و بجای دستور پاک کردن یا خواندن و پاک کردن از دستور Stack_pop استفاده کنید
            و برای فقط خواندن مقدار موجود در آخرین مقدار موجود در پشته (آرایه تعریفی) از تابع stack_seek استفاده کنید (کار stack_pop را انجام می دهد با این تفاوت که مقدار را پاک نمی کند).
            البته بصورت عادی نیز می توانید از آرایه استففاده کنید
            Const Sizearray = 10
            Dim Numarray(sizearray) As Byte
            Dim Posarray As Byte
            Declare Function Stack_pop(byref Array As Byte , Num As Byte) As Byte
            Declare Sub Stack_push(byref Array As Byte , Num As Byte)
            Declare Function Stack_seek(byref Array As Byte) As Byte



            Function Stack_pop(byref Array As Byte) As Byte
            Local Temp As Byte
            Temp = Array(posarray)
            If Posarray <> 0 Then : Decr Posarray : End If
            Stack_pop = Temp
            Return
            End Function

            Sub Stack_push(byref As Byte , Num As Byte)
            Array(posarray) = Num
            If Posarray < Sizearray Then : Incr Posarray : End If
            Return
            End Sub

            Function Stack_seek(byref Array As Byte) As Byte
            Stack_seek = Array(posarray)
            Return
            End Function
            هیچ کس و هیچ چیز نمی تونه مانع رسیدنت به آرزوهات بشه مگر خودت

            دیدگاه


              #7
              پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

              این الگوریتم چطوره؟
              البته برای اصلاح عدد وارد شه نوشته نشده
              فقط دوتا عدد دورقمی میگیره
              هنوز جواب نگرفتم و ریزه کاری داره
              اگه میشه اشکالاتش رو بهم بفرمایید

              کد:
              A:
              Cls
              Lcd "  Insert time"
              Locate 2 , 1
              
              Home1:
              Key = Getkbd()
              Gosub Key_convert
              If Key > 15 Then Goto Home1
              Waitms 200
              Select Case Key
              Case 0 To 9
              _min = Key
              _min = _min * 10
              Lcd "   " ; Key
              Goto K
              Case Else
              Goto Home1
              End Select
              
              K:
              Key1 = Getkbd()
              Gosub Key_convert
              If Key1 > 15 Then Goto K
              Waitms 200
              Select Case Key1
              Case 0 To 9
              I = _min + Key1
              _min = I
              Lcd K ; ":"
              Goto K2
              Case Else
              Goto K
              End Select
              
              K2:
              Key2 = Getkbd()
              Gosub Key_convert
              If Key2 > 15 Then Goto K2
              
              Waitms 200
              Select Case Key2
              Case 0 To 9
              _sec = Key2
              _sec = _sec * 10
              Lcd Key2
              Goto K3
              Case Else
              Goto K2
              End Select
              
              K3:
              Key3 = Getkbd()
              Gosub Key_convert
              If Key3 > 15 Then Goto K3
               Waitms 200
              Select Case Key3
              Case 0 To 9
              I = _sec + Key3
              _sec = I
              Lcd Key3
              Goto Main
              Case Else
              Goto K3
              End Select
              
              
              
              '=====================================================
              Do
              Main:
              ...
              Reveng will surely come... Your hard time are ahead
              // - - - - - - - - - -
              برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
              // - - - - - - - - - -
              اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
              // - - - - - - - - - -

              دیدگاه


                #8
                پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

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

                Dim Ali(8) As Byte , k as byte , key as byte
                dim om as string*1
                .
                .
                .
                I1 = 0 : Om = ""
                Keypad:
                Do
                K = Getkbd()
                Select Case K
                Case 0 : Key = 0
                Case 1 : Key = 1
                Case 2 : Key = 2
                Case 3 : Key = 3
                Case 4 : Key = 4
                Case 5 : Key = 5
                Case 6 : Key = 6
                Case 7 : Key = 7
                Case 8 : Key = 8
                Case 9 : Key = 9
                Case 10 m = "c"
                Case 11 m = "/"
                Case 12 m = "*"
                Case 13 m = "-"
                Case 14 m = "+"
                Case 15 m = "u"
                End Select
                Loop Until K <> 16

                Do
                K = Getkbd()
                Loop Until K = 16
                K = 0

                keyها رو طبق برنامه و موارد مورد نیازت تغییر بده.

                1-
                If I1 < 8 Then
                Incr I1
                ali(i1) = Key
                End If

                -2
                If I1 < 8 Then
                If om = "u" Then
                Decr I1
                Goto keypad
                End If
                End If

                1- این قسمت رو واسه این نوشتم که به عنوان مثال میخوام یه عدد 8 رقمی بگیرم, واسه همین هم ali رو متغیر آرایه ای 8 تایی تعریف کردم و پس از هربار فشرده شدن کیپد یک واحد به I1 اضافه میشود و در آرایه ذخیره میشود.

                2- فرض کردم که در صورتی که کلید مربوط به undo فشرده شود, حرف u وارد متغییر om بشود و با این شرطی که گذاشتم عملیات مربوط به undo انجام بشود. به این صورت که یک واحد از I1 کم شود در این شرایط عدد گرفته شده بعد از فشردن کلید undo جایگزین عدد قبلی میشود که همان عملیات undo میباشد.

                اگه دوباره به مشکل برخوردی خبرم کن تا که کمکت کنم.
                تشکر لازم نیست. :^O
                اینها همش وظیفه ست. :^O

                دیدگاه


                  #9
                  پاسخ : کلید undo در برنامه گرفتن عدد از کیبورد

                  عدد رو در یک رشته نگهداری کن.
                  - در صورت فشار دادن کلیدی اون رو به انتهای رشته اضافه کن.
                  - در صورت undo کردن با استفاده از دستور زیر آخرین کاراکترش رو حذف کن:

                  If Len(Number) > 1 Then
                  Number = Left(Number, Len(Number)-1)


                  فقط در صورتی که رشته خالیه عدد صفر باید نمایش داده بشه.

                  دیدگاه

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