ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Калькулятор на VB - це легко !
         

     

    Інформатика, програмування

    Калькулятор на VB - це легко!

    (автор: Єсін І. В., email: [email protected])

    Про що ...

    Стаття має дві редакції: для початківців освоювати мова та для тих укого не тільки абревіатура VB не викликає питань, а й більш-меншволодіють ім.

    У даній редакції від читача потрібне знання VB на доситьхорошому рівні, що означає володіння навичками візуальногопрограмування, подієво-керованого програмування і звичайно
    «Основних» операторів мови. Пропонується один із способів пошуку рішенняподібних завдань.

    Перший крок або інтерфейс користувача

    Тут особливо нічого фантазувати не треба, а просто згадати, яквиглядає звичайний калькулятор, які кнопки у нього і яке їхнє призначення.
    У мене вийшло так:

    Інструмент CommandButton містить такі питання, що цікавлять нас властивість іподія, які дають нам повну ясність його вибору. Аналогічне можнасказати і про інструмент Label. Декоративний інструмент Line необов'язковий.

    Для розуміння мого програмного коду вам треба буде погодитися знаступними іменами представлених об'єктів і їх властивостями:

    0. Форме привласнимо ім'я Calculator.

    1. Кнопки з цифрами утворюють масив кнопок Knopki індекси, які збігаються з їх написами.

    2. Кнопка точка - це об'єкт з ім'ям Tochka, a кнопка зміни знаку числа [+/-] - Plusmin.

    3. Кнопки арифметичних операцій мають загальне ім'я Operacia, але проіндексовані. Причому кнопка з написом + має індекс 4, кнопка зі знаком мінус - індекс 2, кнопка "розділити" - 0, а кнопка відповідна множенню - 5.

    4. Кнопка "скидання" [С] - Sbros.

    5. Кнопка "очистити" [CE] - Ochistka.

    6. Кнопка "видалити" [0

    Tablo.Caption = "-" & Tablo.Caption

    End Select

    End Sub

    Інша - можливість введення дрібного числа:

    Private Sub Tochka_Click ()
    'якщо число ціле, то дозволяємо ввести дробове число:
    If Fix (Val (Tablo.Caption)) = Val (Tablo. Caption) Or Ravno.Tag = "друга"
    Then Tablo.Tag = "не ціле"
    'до того ж ... якщо вводити дробове число після вказівки операції, тоціла його частина - нуль:
    If Ravno.Tag = "друга" Then Tablo.Caption = "0"

    End Sub

    Виправлення помилок ...

    Дозволимо також прати набране число і видаляти останню цифру числа натабло, що забезпечить наступний фрагмент програмного коду:

    Private Sub ochistka_Click ()
    'отримаєте по кнопці CE "перетворює" число на табло в нуль:
    Tablo.Caption = "0"
    Tablo.Tag = "" 'вводимо ціле число

    End Sub

    Private Sub udalit_Click ()

    umnaya.SetFocus

    ' чи є число цілим?

    If Fix (Val (Tablo.Caption)) = Val (Tablo.Caption) Then

    'якщо ціле - видалимо останню цифру

    Tablo.Caption = Mid (Tablo.Caption, 1, Len (Tablo.Caption) - 2)

    'а якщо число було нулем - то так і залишимо - "нуль": < p> If Tablo.Caption = "." Then Tablo.Caption = "0"

    Else

    'якщо на табло число не ціле, то просто вилучимо останню цифрунаписи

    Tablo.Caption = Mid (Tablo.Caption, 1, Len (Tablo.Caption) - 1)

    End If

    End Sub

    Рахувати, рахувати й ще раз рахувати!

    Далі користувач, швидше за все, захоче вказати одне з арифметичнихдій: скласти, відняти, помножити, поділити задане число з якимсьіншим. Надамо йому таку можливість!
    Тут необхідно передбачити наступне: 1) користувач може змінитиобрану операцію (не змінивши до цього числа на табло), 2) якщокористувач уже обирав до цього якусь операцію, не знаходив їїзначення за допомогою клавіші одно або не ставив стан первісноїготовності, то обчислюється результат цієї операції.

    Легко зрозуміти, що ці особливості взаємопов'язані між собою: другаможлива тільки тоді, коду користувач не змінює вибір операції.
    Перша особливість вибору арифметичної дії частково розглянута.
    Згадаймо, що за умов згадування користувачем операції програма запише взмінну Ravno.Tag значення "друга". Таким чином, при входженні впроцедуру обробки події клацання миші по одній з кнопок Operaciaумовний оператор програмного коду за допомогою цієї змінної перевірить:
    "А чи не змінює користувач обрану операцію?!". При негативномувідповіді за допомогою змінної deystvie буде вирішувати чи треба передаватиуправління процедурою обчислення значення резултата Rezultat (). У будь-якихвипадках, мінлива deystvie набуде значення відповідне вибраномуарифметичного дії. При цьому вже знайома нам мінлива pervoeнабуде значення числа табло, а Ravno.Tag буде повідомляти процедурі введеннячисла, що вводиться нове число і надавати можливість змінитиоперацію. Все це знаходимо в наступній процедурі:

    Private Sub Operacia_Click (Index As Integer)

    If Ravno.Tag = "" Then 'немає зміни вибору операції?

    'якщо операція була задана - обчислюємо її значення:

    If deystvie "ні" Then vtoroe = Val (Tablo.Caption): rezultat

    End If

    Select Case Index 'запишемо обрану дію

    Case 0 deystvie = "розділити"

    Case 2 deystvie = "відняти"

    Case 4 deystvie = "скласти"

    Case 5 deystvie = "помножити"

    End Select

    pervoe = Val (Tablo.Caption) 'перше число операції - те що натабло при виборі операції

    Ravno.Tag = "друга" 'режим введення другого числа

    End Sub

    Нескладно здогадатися, що процедура обчислення результату буде викликатисятакож з процедури обробки натиснення кнопки "дорівнює". І перш ніжрозглядати першим, напишемо програмний код для другого.
    Зробимо так, що якщо: 1) друге число не введено і кнопка "одно"натискається один раз, то значення не обчислюється, 2) якщо кнопка натискаєтьсядва рази поспіль, то в якості другого числа операції вибирається поточнечисло табло і результат обчислюється.

    У всіх випадках нам сприятиме мінлива Ravno.Tag. Якщо вонадорівнює "друга", то це задовольняє першу умові. Однак, щобреалізувати другий призначимо даної змінної порожній символ. І вже тутвнаслідок умови покладемо значення змінної vtoroe число, "яке натабло "і запустимо процедуру Rezultat (), потім поставимо калькулятору подобупочаткового стану (без відображення на табло нуля). Можна написати так:

    Private Sub Ravno_Click ()

    If Ravno.Tag "друга" Then

    vtoroe = Val (Tablo.Caption)

    Call rezultat

    Ravno.Tag = "другого" 'режим введення "друга" числа

    Tablo.Tag = ""' дві змінні ука-deystvie = "ні" ' викликають початковий стан

    Else

    Ravno.Tag = "" 'можемо в "наступного разу" вважати першимчислом поточне число табло

    End If

    End Sub

    «Нуль», «не можна» і «ділити»

    А ось і процедура обробки результату (розуміння якої у вас, я думаю,не важко):

    Private Sub rezultat ()

    Select Case deystvie

    Case "скласти"

    Tablo.Caption = pervoe + vtoroe

    Case "відняти"

    Tablo.Caption = pervoe - vtoroe

    Case "розділити"

    If vtoroe 0 Then

    Tablo.Caption = pervoe/vtoroe

    Else 'на нуль справді не можна ділити!

    Tablo.Caption = "на нуль не ділять!"

    End If

    Case "помножити"

    Tablo.Caption = pervoe * vtoroe

    End Select

    End Sub

    У ній, як бачите, результат відразу "викидається" на табло.

    Про користь клавіатури.

    І перед тим, як підготуватися до останнього бажанням користувача - матиможливість проводити обчислення з клавіатури, додамо до вже наявноїчастини програмного коду процедуру обробки натиснення кнопки [С] (скидання впервісну) готовність:

    Private Sub Sbros_Click ()

    deystvie = "ні" 'стираємо, можливо, ця дія

    Tablo.Caption = "0"' на табло - нуль
    Tablo.Tag = "" 'за замовчуванням - вводиться ціле число

    End Sub

    Користувач буде вводити число з клавіатури використовуючи клавіші з цифрами,клавіші з крапкою, а для зміни знаку числа клавішу +/=. Редагуватичисло з допомогою клавіш Backspace і Пробіл. Дані дії оперделім вкоді процедури Form_KeyPress (), використовуючи чудовий аргумент цієїпроцедури - KeyAscii.
    Тому якщо знати (або дізнатися) Ascii-коди клавіш, то розуміння цієїпроцедури не займе багато часу:

    Private Sub Form_KeyPress (KeyAscii As Integer)

    Select Case KeyAscii

    Case 8 udalit_Click

    Case 42 , 43, 45, 47 'тепер стало ясним чому індекси

    Operacia_Click (47 - KeyAscii)' йдуть не по порядку?

    Case 61 'міняємо знак

    Plusmin_Click

    Case Is> 47 'вводимо цифри

    If KeyAscii <58 Then knopka_Click (KeyAscii - 48)

    Case 32' а тут пробілом "чистим" табло ochistka_Click

    End Select

    End Sub

    Дана процедура не дозволяє відловлювати натискання «точки», тому що Ascii -коди «точки» на малій цифровій клавіатурі відмінні при різних розкладках.
    Напишемо відповідний код у наступній процедурі.

    Результат буде!

    Однак ми досі не вказали замінники кнопок "скидання в первіснийстан "і" рівно ". Для першого випадку складність полягає ввигадуванні клавіші, а для іншого - способу "відлову" натисканняклавіші (я думаю ні в кого не виникне сумніву в тому, що натискання клавіші
    Enter відповідатиме клацання по кнопці одно).

    скидає в початковий стан клавішею Delete:

    Private Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)

    If KeyCode = 46 Then sbros_Click
    'оскільки значення "точки" малої цифрової клавіатури у KeyAscii НЕоднакові
    'при різних розкладках, то "ловимо" її за допомогою KeyCode
    If KeyCode = 110 Then tochka_Click

    End Sub

    Спіймати натискання клавіші Enter на кнопці можна в такий чином. Для цьогоспочатку кинемо на форму текстбокс. І сховаємо його під кордон майбутнього вікнадодатки (спочатку збільшимо висоту, потім помістимо "туди" текстбокс ізадамо висоту форми до її зміни). Змінимо лише властивості TabIndex на 1та Name на Umno. Як ви вже здогадалися натискання швидше за все з цьогооб'єкту буде виявляти натискання клавіші Enter. Тому маємо такупроцедуру:

    Private Sub Umno_KeyPress (KeyAscii As Integer)

    If KeyAscii = 13 Then Ravno_Click

    End Sub

    Однак, це спрацює тоді, коли об'єкт Umno має фокус. А що, якщоклацнути по якийсь із кнопок? Тоді фокус переходить цій кнопці. Ізначить, нам треба спочатку всіх процедур обробки клацань кнопок написати:

    Umno.SetFocus

    і тоді фокус буде завжди повертатися на потрібне нам місце!

    І, нарешті , завершимо наш проект, повернувшись майже до самого початку ...
    "Пофарбувати" елементи управління!
    Для цього процедуру Form_Load можна написати так:

    Private Sub Form_Load ()

    Me.BackColor = RGB (50, 150, 250)
    Sbros.BackColor = RGB (250, 50, 0)
    Ochistka.BackColor = RGB (250, 75, 0)
    Udalit.BackColor = RGB (250, 100, 0)
    Ravno.BackColor = RGB (250, 125, 0)

    Operacia (4). BackColor = RGB (150, 250, 250)
    Operacia (2). BackColor = RGB (150, 250, 250)
    Operacia (0). BackColor = RGB (150, 250, 250)
    Operacia (5). BackColor = RGB (150, 250, 250)

    End Sub

    Четвертий крок чи "справі час, а потісі - час! »

    F5 - для перевірки!

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status