Visual basic з нуля

Змінні. Option Explicit.

Все, пора поговорити про змінних. Без них нічого робити ми більше не можемо. Я не буду довго і нудно вантажити тебе теорією. Але мінімум знати треба.







Дуже бажано, щоб програма починалася з інструкції Option Explicit. Вона вимагатиме явно оголошувати змінні. Тобто, якщо ти написав ім'я змінної з помилкою, то при запуску програми VB знайде це місце і тицьне тебе носом, бо ім'я змінної з помилкою не збігається з ім'ям оголошеної змінної. Змінну треба оголошувати явно за допомогою інструкції Dim.

Зараз я поясню цю муть на прикладі, інакше сам не розумію, що написав.

'Оголошуємо явно змінну MyStroka як строкову (тобто текстову)

Dim MyStroka As String

'Потім присвоюємо їй значення "змінна", але ім'я змінної' написано з помилкою

При запуску програми VB відразу знайде це місце, як помилку, і виділить його. Якщо у нас не буде прописана інструкції Option Explicit. то наша помилкова змінна буде визначена, як нова. Але значення правильної змінної MyStroka ми не присвоїли, бо привласнили її нової змінної з помилкою в імені. Тоді в подальшому, коли ми захочемо отримати значення правильної змінної, його в ній не просто не буде.

Ось начебто зрозуміло.

Таким чином будь-який напис, крім зарезервованих VB слів можна зробити змінною. Але починатися ім'я має з літерного символу. Наприклад Peremenaia, Ima1, X, LastNumber, z001. Не треба використовувати в іменах математичні оператори. І не можна оголошувати дві змінні з однаковими іменами. В принципі, для зручності читання коду і солідності існують певні правила написання імен змінних. Але я їх дотримуватися не буду. Якщо полювання, пошукай в Інтернеті що-небудь про Угорське угоду.

Нас же цікавлять змінні наступного типу

Long 'довге ціле число зі знаком від -2 147 483 648 до 2 147 483 647

Integer 'ціле число зі знаком від -32 768 до 32767

String 'рядок символів

Boolean 'логічне, приймає два значення або "True" (Істина) або "False" (Брехня)

Поки що нам цього вистачить. Якщо цікаво, то більш детально типи даних, підтримувані VB можна подивитися тут.

Dim MyStream As String
Dim K14 As Long
Dim Flag As Boolean
Dim Numder As Integer

Private Sub Form_Load ()
Dim Flag2 As Boolean
Dim l99little As String
End Sub

Таймер. Програма "Годинки".

Тепер, таймер. Зліва, де компоненти форми, вони ж інструменти-елементи, намальований такий будильничек. Це таймер і є. Він завжди невидимий, але потрібний елемент. Всього їх одночасно можна використовувати близько 30 штук. Але нам стільки їх до фіга не треба. Помістимо один його на форму. На основі його ми зробимо зараз маленькі годинничок. У властивостях цього таймера поставте наступні установки:

Enabled - False (за замовчуванням True) означає, що таймер вимкнений

Interval - 1000 (час, в мілісекундах, через яке таймер спрацьовує, якщо звичайно включений). Таймер буде спрацьовувати кожні 1000 мск, тобто щосекунди, як в нормальних годиннику.

Крім того, нам знадобляться три лейбла: Label1 для секунд, Label2 для хвилин і Label3 - самі здогадайтеся для чого. Правильно, для відображення відповідно годиною, хвилин і секунд. Усе.

Поставте в властивостях лейблів такі установки:

Alignment - 2-Центровка (Це щоб цифри були по центру лейблів)
BorderStyle - 1-Фіксована (це щоб розмір форми можна було змінити)
Caption - 00 (на всякий випадок, тобто значення лейблів спочатку буде "00")

Натисніть Font і виберіть розмір шрифту 14, а накреслення - напівжирне. Після цього підберіть відповідний розмір вікон лейбл, щоб цифри в них виглядали покрасивше.

Має вийти як на рис.8.

Зроби підпрограму Form_Load.

Private Sub Form1_Load ()

Потім в тілі процедури, як у будь-якої пристойної програми міняємо заголовок форми.

Далі, для того, щоб наш годинник відразу показували поточний час, треба його взяти з комп'ютера. Щоб отримати системне час є функція Time (Label1.Caption = Time). Але вона дає повне час одним рядком (16:23:42). Нам треба вибирати з неї секунди, хвилини та години, щоб розіпхати по свої лейблам. Для цього візьмемо готові функції, які нададуть нам це все по частинах:

Label1.Caption = Second (Time) 'отже секунди
Label2.Caption = Minute (Time) 'ну хвилини
Label3.Caption = Hour (Time) 'і годинник

Тепер, якщо ми запустимо програму, у нас буде показуватися поточний час, але ось тільки годинник варті.

Ось вона, булева алгебра. Тобто Timer1.Enabled може бути або включений (True), або вимкнений (False).

Щоб отримати хоч якісь блага від запущеного таймера, створимо процедуру, яка буде виконуватися при настанні події спрацьовування таймера

Private SubTimer1_Timer ()

Наші секунди повинні збільшуватися на одну за кожне спрацьовування таймера. Тому пишемо лічильник







Label1.Caption = Label1.Caption + 1

І ось ми впритул підійшли до проблеми умовного оператора If. або інструкції If. Суть цієї інструкції в тому, що він дозволяє при деякому создавшемся умови виробляти зміни в ході програми.

По-русски оператор If буде виглядати наступним чином:

Якщо Вася любить Машу Т оли
Маша кльова

В іншому випадку Якщо Вася любить Петю Т оли 'якщо не виконується верхнє умова
Вася козел

І в іншому випадку "а то й виконується жодної умови
Вася дурень
кінець Якщо

Шматки оператора If виділені синім кольором. Якщо записати це програмно, то

If Vasia + Masha = "Love" Then
Masha = "Good"

ElseIf Vasia + Petia = "Love" Then
Vasia = "Kozel"

Оператор If перевіряє перша умова, чи правильно (True) вираз Vasia + Masha = "Love". Якщо вірно, виконуються оператори, що стоять за ним, але до гілки ElseIf. Якщо вираз помилково (False), то наступні за першим рядком оператори не виконуються, а VB переходить до наступної частини оператора ElseIf і так поки не перевірить всі умови. Якщо нічого не виконується, обробляються оператори, що стоїть за гілкою Else.

Все дуже просто. Це взагалі мій улюблений оператор. Без нього - нікуди.

Якщо нам не потрібно перевіряти додаткові умови, а скажімо, потрібно якщо виконується, то робити те-то, а якщо немає, то інше, оператор має вигляд:

If Vasia + Masha = "Love" Then
Masha = "Good"
Else
Vasia = "Durak"
End If

Це, так звані, блокові форми оператора If, найдовші. Можна його використовувати в один рядок, тобто якщо виконується умова, то те-то:
If Vasia + Masha = "Love" Then Masha = "Good" Else Vasia = "Durak"
або
If Vasia + Masha = "Love" Then Masha = "Good"

А тепер застосуємо знання цього оператора на практиці. Щоб у нас свідчення часу в нашій програмі «Годинник» до десятка були з нулями 01, 02, 03, а не 1, 2, 3 ми перевіряємо умову, менше чи довжина числа, записаного в лейблі двох. Якщо так, то додаємо попереду нулик. Для цього використовуємо функцію Len ( "рядок"). яка визначить число символів в рядку. Якщо в рядку, наприклад 5 символів, то Len дасть число 5. У нас вийде:

If Len (Label1.Caption) <2 Then Label1.Caption = "0" & Label1.Caption‘для первого лейбла

Але ж і при завантаженні системного часу в підпрограмі Form1_Load нам теж потрібна така перевірка. Не будемо ж ми переписувати одне і теж в двох різних процедурах. Ми зробимо свою процедуру і будемо звертатися до неї в міру необхідності. Назвемо її, наприклад Zero. В кінці нашої програми на вільному місці набираємо на клавіатурі:

Private Sub Zero ()
If Len (Label1.Caption) <2 Then Label1.Caption = "0" & Label1.Caption
If Len (Label2.Caption) <2 Then Label2.Caption = "0" & Label2.Caption
If Len (Label3.Caption)<2 Then Label3.Caption = "0" & Label3.Caption
End Sub

Таким чином у нас тепер є своя власна підпрограма, яка називається Zero. Ніяких подій для її виконання немає, і щоб вона працювала, в потрібному місці, просто пишемо її назву Zero. А потрібні ці місця в останньому рядку в порцедурах Form1_Load () і Timer1_Timer () прямо (перед End Sub).

Ну ось, з нулями все в порядку, зате годинник не працює. У підпрограмі Timer1_Timer () у нас всього один оператор. Щоб годинник працювали, як справжні, нам треба, щоб, коли секунд ставало більше 59, вони обнулялися, при цьому хвилини збільшувалися б на один. Використовуючи оператор If це нікчемна справа:

If Label1.Caption> 59 Then
Label1.Caption = "0"
Label2.Caption = Label2.Caption + 1
End If
'Те ж саме для Лейбла2:
If Label2.Caption> 59 Then
Label2.Caption = "0"
Label3.Caption = Label3.Caption + 1
End If

Ну, а для Лейбла3 взагалі фігня. Треба, щоб, якщо більше 23 годин, показувало не 24, а 00:

If Label3.Caption> 23 Then Label3.Caption = "0"

Тепер ставимо ссилочку на нашу програму перевірки налякав Zero:

Ви хлопці, вибачайте, програма всього 27 рядків. Я розжував її як міг. Код прописаний нижче від і до. Хто хоче, може скачати исходник програми вгорі станиці.

Private Sub Form_Load ()
Form1.Caption = "Годинки"
Label1.Caption = Second (Time)
Label2.Caption = Minute (Time)
Label3.Caption = Hour (Time)
Timer1.Enabled = True
Zero
End Sub

Private Sub Timer1_Timer ()
Label1.Caption = Label1.Caption + 1
If Label1.Caption> 59 Then
Label1.Caption = "0"
Label2.Caption = Label2.Caption + 1
End If
If Label2.Caption> 59 Then
Label2.Caption = "0"
Label3.Caption = Label3.Caption + 1
End If
If Label3.Caption> 23 Then Label3.Caption = "0"
Zero
End Sub

Private Sub Zero ()
If Len (Label1.Caption) <2 Then Label1.Caption = "0" & Label1.Caption
If Len (Label2.Caption) <2 Then Label2.Caption = "0" & Label2.Caption
If Len (Label3.Caption) <2 Then Label3.Caption = "0" & Label3.Caption
End Sub

«Однорукий бандит» - імітація роботи відомого апарату для азартних ігор. Сенс програми в наступному. У трьох лейбл відображаються мінливі цифри від 1 до 7. Для роботи з ними використовуються три змінні Number. Їх зміна управляється трьома таймерами. Спочатку інтервали у таймерів однакові - 10 мск. У трьох змінних Zamedlenie генеруються випадкові числа.

Zamedlenie1 = Int (Rnd * 20) + 10

Працює це так. Rnd генерує псевдовипадкове число від 0 до 1. На двадцять множимо, щоб отримати цілу частину числа (можна множити на що завгодно, але не менше 10, а то не вийде ціла частина). Функція Int відкидає дробову частину. Додаємо в кінці 10, щоб виключити значення 0, а то таймер не зупиниться. Тобто якщо Rnd генерує, наприклад, число 0,156, то

Zamedlenie1 = Округляем (0,156 * 20) + 10 = 3 + 10 = 13. Дуже просто.

При кожному спрацьовуванні таймерів збільшується його інтервал на значення уповільнення, поки Інтервал не стає більше 300 (це задано програмно: Timer1.Interval> 300

Після цього таймер вимикається. Щоб дізнатися, чи все таймери вимкнулися, я використовую змінну Flag, яка накопичує в собі кількість Вимкнути таймер. Коли Flag = 3, вважаємо, що всі три таймера закінчили роботу (а так воно і є) і починаємо обробляти результати (підпрограма Raschet ()). Початковий капітал гравця зберігатися у змінній Summa, а при різних виграші вона змінюється на суму трьох змінних Bonus, а при програші на змінну BonusMinus. Чому її значення негативне? Просто мені так захотілося, хоча це, звичайно, перекручення. У лейбл 4 і 5 виводяться всякі прикольні написи, в залежності від результату гри. Ну і крім того, щоб під час роботи таймерів лампочка кнопки не натискалася, вона за станом змінної FlagClick або дозволяє запустити таймери, або змінює свій напис.

Після того, як капітал гравця вичерпано, ми переходимо до підпрограми припинити грати EndOfGame (). коли кнопка блокується. Подальша гра при цьому неможлива.

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

Ну ось, практично і все. Решту ти повинен додумати сам. Хай щастить.







Схожі статті