
Дипломна робота на тему "Visual Basiс"
Зміст.
Вступ. 2
I. Теоретична частина. 6
1.1 Основи програмування 6
Опис середовища програмування 6
Робота з меню. 7
Організація елементів керування Visual Basic 8
Основні елементи програми 9
Настройка форм і елементів керування 9
Вікно Project (Проект) 10
Вікно програмного коду 10
Основна довідкова система 11
Контекстна підказка 13
1.2. Використання форм і елементів керування 14
Знайомство із властивостями, методами і подіями 15
Керування поведінкою форм за допомогою властивостей 15
Загальна характеристика більшість об’єктів 15
Місце положення об’єкта 16
Видимість об’єкту 16
Назва об’єкта 17
Використання методів 18
Обробка подій 19
Зв’язок між властивостями і методами 19
Складові компоненти форми 20
Визначення властивостей 21
Відображення форми 24
Обробка подій (Load і Activate) 25
Використання елементів керування 26
Призначення елементів керування 26
Добавлення до форми елементів керування 28
Робота з текстовими елементами 28
Використання елемента Label для виводу тексту 28
Ввід тексту за допомогою елемента TextBox 30
Вибір альтернативних варіантів 31
Виконання операцій 33
1.3. Основні відомості про моделі програмування, які керуються подіями. 34
Програмування і події 34
Типи подій 35
Події користувача 35
Основні події 36
Створення процедур для обробки подій 37
Множина подій для визначення дії 38
1.4. Використання меню і діалогових вікон 39
Керування програмою за допомогою меню 39
Створення панелі меню 39
Компонування основних опцій меню 39
Ієрархічне меню 41
Написання коду для елементів меню 42
Вивід інформації для користувача 42
Вивід повідомлення 43
Функція MsgBox, яка повертає значення 44
Отримання інформації від користувача 46
Настройка діалогового вікна вводу 46
1.5. Програмування на Visual Basic 48
Робота із змінними 48
Типи змінних 48
Оголошення змінних 49
Константи Visual Basic 50
Оператор присвоєння 51
Математичні операції 51
Робота з рядками 53
Розгалуження програми 53
Оператор If 53
Оператор If, який складається з одного рядка 53
Умова яка виконує групу команд 54
Використання операції Not 54
Обробка умов True і False 55
Використання вкладених операторів If 55
Використання оператора Select Case 56
Використання циклів 57
Цикли For 57
Цикли DO 59
Оператори Do While 59
Оператори Do Until 59
Масиви 60
Багатовимірні масиви 60
1.6. Використання процедур і функцій. Робота з декількома формами 61
Використання процедур і функцій 61
Причини використання процедур 61
Створення процедур і функцій 62
Ручне написання коду процедури 62
Використання вікна Add Procedure 63
Виконання процедури 64
Створення функції 64
Визначення області дії процедур і функцій 66
Тип Public 66
Тип Private 66
Збереження значення змінних (Static) 66
Робота з декількома формами 67
Добавлення до програми і відображення нових форм 67
II. Програма вивчення Visual Basic в школі. 68
ІІІ. Оформлення та звіт випускної задачі. 70
3.1. Оформлення випускної задачі 70
Титульний лист 70
Інструкція. 71
Робоча програма 71
Заключний кадр 72
3.2. Звіт випускної задачі 73
Титульний лист 73
Завдання (умова задачі) 73
Алгоритм програми 73
Текст програми і основна форма 73
Заключний кадр 73
IV. Спеціальне запитання. 74
Задача розміщення 74
Алгоритм Флойда-Уоршелла 76
Алгоритм задачі розміщення 77
Висновок. 79
Література. 80
Додатки. 81
Проект гри “Хрестики-нулики” 81
Код програми для проекту “Хрестики-нулики” 83
Form1 83
Form2 83
Form3 83
Form4 86
Звіт до випускної задачі. 87
Завдання 88
Алгоритм програми 88
Текст програми і основна форма 90
Заключний кадр. 93
Вступ.
Ще кілька років тому в будь-якого програміста при слові Basic виникала асоціація з безнадійно застарілою мовою програмування, придатним хіба що на написання невеликих програмок зеленими початківцями. Рахували, що в найближчому майбутньому Basic займе своє місце на смітнику історії разом з такими мовами програмування, як Алгол або ПЛ/1. Дійсно, створений в 60-ті роки Basic був мовою для непрофесіоналів, простим у вивченні, але без достатньо потужних керуючих структур, без можливості створювати свої бібліотеки підпрограм і без багатьох інших рис притаманних професіональним мовам програмування. На протязі більше, ніж тридцяти років історії розвитку Basic час від часу робились деякі спроби насити цю мову програмування новими властивостями. В її синтаксис вводилися підпрограми, забиралися номера рядків і т.д. Але всі ці спроби лише копіювали вже відомі мови програмування, не роблячи нічого нового. І можливо Basic так і пішов би, якщо б на початку 90-х років фірма Microsoft не випустила продукт під назвою Visual Basic. Цікаво відмітити, що одночасно було випущено версії Visual Basic для MS DOS і Windows. Але якщо версія під MS DOS не отримала розвитку (вона і дійсності була дуже великою за обсягом і не дуже вдалою), то версія Visual Basic для Windows чекала зовсім інша доля.
Visual Basic – це легкий спосіб розробити власні програми для Windows. Слово Basic (Бейсік) походить від Beginner’s All-purpose Symbolic Instruction Code (мова програмування загального призначення для початківців). Слово Visual (Візуальний) означає, що при створенні програми багато операцій виконуються візуальними засобами, тобто без написання коду.
По підрахункам спеціалістів, в теперішній час на Visual Basic у світі програмують біля 2,5 мільйонів програмістів.
По популярності Visual Basic на порядок перевищує мову, яка займає друге місце, – мова С. Такий феномен безперечно потребує свого вивчення і роз’яснення. В чому ж козир Visual Basic? Це, перш за все, “візуальне програмування”, програмування, яке керується подіями, і зв’язок з іншими програмними продуктами фірми Microsoft.
В самій назві мови Visual Basic зроблений акцент на побудову програм за допомогою візуальних засобів. На відміну від звичайного набору програми термін “візуальне програмування” розуміється побудова програм повністю, або частково маніпулюванням візуальними образами, з автоматичною фоновою генерацією програмного коду. Говорячи звичайною мовою, програміст розміщує в робочій області екрану деякі графічні елементи, а система програмування в цей час створює програмний код для їх опису. такий підхід до створення програм виник ще до широкого розповсюдження Microsoft Windows. Але по-справжньому застосування “візуального програмування” почалось тільки після масового переходу на операційні системи з графічним інтерфейсом.
Все вище сказане дозволяє зробити висновок про те, що Visual Basic популярна мова програмування, яка має своє майбутнє. Зараз самий сприятливий час для освоєння цієї мови, адже з її допомогою можна швидко створювати програми, встановлювати зв’язок з іншими програмними продуктами фірми Microsoft.
Саме тому темою дипломної роботи стала “Вивчення мови програмування Visual Basic у школі”.
Мета дипломної роботи полягає у тому, щоб вивчити використання мови програмування Visual Basic у вивченні інформатики, розробити програму вивчення цієї мови у школі, подати основний теоретичний матеріал.
Новизна досліджень полягає у розробці теоретичних положень впровадження у шкільне навчання візуальної мови програмування (Visual Basic).
Практично-значущість дослідження полягає у можливості застосування в подальшій педагогічній практиці студентів та учителів інформатики середніх навчальних закладів розроблених теоретичних положень вивчення мови програмування Visual Basic.
Дипломна робота структурно ділиться на 4 розділи.
Перший розділ розглядає базові поняття. Спочатку описується середовище програмування Visual Basic і обговорюються загальні концепції програмування, наприклад, важливість вірного структурування. Потім розглядаються форми і елементи керування, які є основними елементами програми, які створюються на Visual Basic. Дальше показується, як з допомогою властивостей маніпулювати формами і елементами керування і як виконувати задачі, використовуючи їх методи, розглядається обробка подій.
Після знайомства з формами і елементами керування буде показано, як виконувати в програмі будь-які функції на мові Basic, вмонтованого у Visual Basic. Ця мова програмування має широкі можливості і функції, які дозволяють написати програми для рішення будь-якої задачі.
Розглядаються способи покращення програми з використанням меню і діалогових вікон. Ці програмні компоненти дозволяють створювати звичний інтерфейс, схожий на інтерфейс звичайних програм для Windows, що робить їх інтуїтивно зрозумілими для користувача.
І на закінчення буде описано як користуватися функція, процедурами і програмами які складаються більш ніж з однієї форми.
Другий розділ містить програму вивчення Visual Basic у школі. Усім добре відомо, що кожна справа якщо її ретельно спланувати з самого початку принесе хороший результат. У даному випадку розробляється програма вивчення мови програмування Visual Basic якою можуть користуватися вчителі у школі.
Третій розділ “Оформлення та звіт випускної задачі”. Справа вважається завершеною, якщо в кінці є результат. Тому по завершенню вивчення теоретичного матеріалу учням пропонується випускна задача. Випускна задача повинна бути належно оформлена, саме тому даний розділ присвячений оформленню випускної задачі та звіту по ній.
Четвертий розділ “Спеціальне запитання”. У цьому розділі розробляється алгоритм розв’язування задачі розміщення, тобто:
“Дано сітку N з n вершинами, яким поставлена вага p1, p2, …, pn. Найти точку u на сітці, таку що:
,
де diu є відстань від і-ої вершини до точки u.”
I. Теоретична частина.
1.1 Основи програмування
Опис середовища програмування
Перше, що ми бачимо після запуску Visual Basic – це діалогове вікно New Project (Новий Проект) (мал. 1.1), який дозволяє вибрати тип проекту який створюється або відкрити існуючий проект. Вкладка Recent (Останнє) має в собі список проектів, з якими працювали останнім часом, а вкладка Existing (Існуючі) – список всіх проектів, які існують на комп’ютері.
Мал 1.1. Діалогове вікно New Project.
Якщо створюється новий проект, вкладка New (Новий), Visual Basic генерує відповідний шаблон проекту, враховуючи тип, вибраний в діалоговому вікні проектів. Можна створювати проекти наступних типів: Standard EXE (Стандартний EXE), ActiveX EXE, ActiveX DLL, ActiveX Control, VB Application Wizard, ADD-IN, ActiveX Document DLL, ActiveX Document EXE.
Але нас насамперед цікавить тип проекту Standard EXE (Стандартний EXE) – це тип використовується для створення програм для Windows. В подальшій роботі ми будемо користуватися тільки цим типом.
В більшості випадків після вибору типу проекту в діалоговому вікні програміст потрапляє в середовище програмування, де і ведеться робота по створенню програми. Базове середовище показано на мал. 1.2.
Мал. 1.2. Робочий стіл Visual Basic.
Робота з меню.
Головне меню забезпечує доступ до всіх функцій, які є в середовищі Visual Basic. Як і в інших програмах для Windows, до функцій меню можна звернутися, клацнувши по елементу меню або використовувати “гарячі кнопки” (hotkeys). Гаряча кнопка виділяється в назві пункту меню підкресленням. Для того щоб за допомогою клавіатури отримати швидкий доступ до більшості функцій меню, потрібно натиснути клавішу <Alt> і, не відпускаючи її, натиснути гарячу клавішу.
Головне меню складаються з таких пунктів:
¬File – за допомогою цього меню можна створити новий проект (New Project), відкрити існуючий проект (Open Project), зберегти проект і форму (Save Project, Save Form), роздрукувати код проекту.
Edit – цей пункт дозволяє вирізати (Cut), копіювати
(Copy), вставляти (Paste), виділяти (Select All), знищувати (Delete) об’єкти.
Run – дозволяє запускати програму на виконання, робити зупинку і взагалі зупиняти виконання.
Tools – за допомогою цього пункту можна створювати процедури, функції, головне меню програми і встановлювати опції.
Help – дозволяє виводити підказку, довідник по Visual Basic і середовищу програмування Visual Basic.
Організація елементів керування Visual Basic
Елементи керування, які використовуються у Visual Basic, являють собою основою програм. Вони дозволяють швидко і легко розширювати функціональні можливості прикладних програм. Є елементи керування, які дозволяють редагувати текст, отримувати від користувача інформацію, а також відображувати і редагувати зображення. Панель елементів керування складається з всіх елементів керування, які можна використовувати в програмах.
Мал. 1.3. Панель елементів керування.
На мал. 1.3 показано набір основних елементів керування, які є в користуванні після першого запуску Visual Basic.
До панелі керування можна добавити інші елементи, потрібно вибрати Components в меню Project. При цьому з’явиться діалогове вікно (мал. 1.4). Якщо до панелі елементів добавиться новий елемент, він з’явиться в панелі після закриття вікна Components.
Мал 1.4. Діалогове вікно Components..
Основні елементи програми
При проектуванні програми форми є основою інтерфейсу користувача, вони мають в собі всі його елементи. Візуальна розробка інтерфейсу здійснюється шляхом малювання елементів керування у формах.
Форма – це частина робочого стола і основна робоча область при створені програми. Якщо уважно подивитися на форму, то можна помітити крапки, які утворюють сітку. Ця сітка слугує для того, щоб полегшити розміщеню елементів керування в середині форми.
Настройка форм і елементів керування
Іншою частиною робочого стола Visual Basic є вікно Properties (Властивості). Це вікно показує властивості поточної форми і елемента керування. Дані властивості визначають зовнішній вигляд форми і елемента керування і їх поведінки при виконані програми. На мал. 1.5 показано вікно Properties з деякими основними елементами: (Name), Appearance, AutoRedraw, BackColor та ін.
Мал. 1.5. Вікно Properties.
Вікно Project (Проект)
Ще один елемент робочого стола – вікно Project. Це вікно показує всі форми і модулі програмного коду. Багато програм можуть мати тільки одну форму; тоді у вікні буде тільки один елемент. На мал. 2.7 показано простий приклад вікна проекту.
Мал. 1.6. Вікно Project.
У вікні Project за допомогою деревовидного списку показуються не тільки форми і кодові модулі, але і заказані елементи керування, які входять в проект. Також в цьому вікні можуть відображуватися декілька проектів, відкритих одночасно.
Вікно програмного коду
Останнім елементом робочого стола є вікно коду. В цьому вікні вводиться і редагується програмний код, завдяки якому програма може виконувати різні задачі. При запуску Visual Basic вікно коду не показується, воно відображується тільки тоді, коли потрібно редагувати код. Для допуску до вікна коду, або вибрати кнопку Show Code (Показати код) у вікні Project. Приклад вікна коду приведено на мал. 1.7.
Мал. 1.7. Вікно коду.
Основна довідкова система
Простіше всього звернутися до довідкової системи за допомогою меню Help (Довідка). В меню довідки Visual Basic є три основних опції.
Microsoft Visual Basic (Розділи довідки)
Search Reference Index (Предметний вказівник)
Search Master Index (Пошук)
Опція Contents має в собі головний зміст довідкової системи, воно показано на мал. 1.8. В цьому змісті можна вибрати теми які нас цікавлять.
Мал. 1.8. Сторінка вікна довідки.
Мал. 1.9. Сторінка довідкової системи по конкретним темах.
Для пошуку довідки по деякій темі в меню Help можна вибрати опцію Search Reference Index. При цьому з’явиться вікно з сторінкою предметного вказівника. Для пошуку терміну потрібно ввести його назву в текстове вікно, а потім клацнути по потрібному рядку в списку, розміщеному нижче. Сторінка предметного вказівника для довідкової системи показана на мал. 1.9.
Контекстна підказка
Крім пошуку по змісту і індексу у Visual Basic є контекстна підказка. Вона дозволяє безпосередньо отримати довідкову інформацію для конкретного елемента або ключового слова. Для отримання довідки потрібно вибрати будь-який елемент у формі і натиснути <F1>. Для ключових слів в програмі достатньо вибрати слово у вікні коду, як показано на мал. 1.10, а потім натиснути клавішу <F1>. Крім того, для більшості команд є посилання на приклади використання цих команд.
Мал. 1.10. Вікно коду.
1.2. Використання форм і елементів керування
• Для чого слугують форми
Форми являють собою контейнери для елементів керування, яки утворює інтерфейс користувача прикладних програм.
• Яким чином керувати зовнішнім виглядом і поведінкою форм
За допомогою властивостей можна змінювати вид і поведінку форми при роботі програми
• Використання елементів керування в прикладних програмах
Описується, як створити в середині форми екземпляри елементів керування і як настроїти ці елементи, використовуючи їх форми
• Призначення різних елементів керування
Описуються функції деяких основних елементів керування
• Використання масивів елементів керування
Використання масивів елементів керування дозволяє спростити зміну властивостей груп елементів керування із програми
• Робота з групами елементів керування
Розказується, як вибирати в середині форми декілька елементів керування і маніпулювати їх загальними властивостями.
Практично будь-яка програма для Windows має два основних компоненти: форм і елементів керування, утворюючу інтерфейс користувача, і програмну, фактично виконуючу задачі.
Візуальні компоненти програми створюються в середовищі Visual Basic за допомогою форм і елементів керування, які дозволяють обробляти ввід користувача, відображати інформацію, реагувати на дії оператора і виконувати багато інших програмістських задач. Організація Visual Basic дозволяє розширювати можливості середовища і використовувати елементів керування і додаткові модулі. Завдяки цьому, Visual Basic стає дуже потужним середовищем створення програм для Windows.
Знайомство із властивостями, методами і подіями
Звичайно форми і елементи керування розглядаються як частини графічного інтерфейсу; їх зовнішнім виглядом і поведінкою керують за допомогою трьох основних компонентів: властивостей, методів і подій. Ці компоненти описуються застосовну до форм, але основні принципи їх використання розповсюджуються на всі елементи керування, які можна використовувати в середовищі Visual Basic.
Керування поведінкою форм за допомогою властивостей
Форма являє собою прямокутне вікно на екрані, подібне показаному на мал. 1.11. Насправді, це вікно має набір властивостей. Наприклад, положення вікна на екрані керують властивості Left (ліва границя) і Top (верхня границя), розмір форми контролюють властивості Height (висота) і Width (ширина). Заголовок вікна, який можна побачити в рядку заголовка, являє собою вміст властивості вікна Caption (заголовок). Задаючи властивості, можна чітко визначити, які кнопки керування появляються всередині форми
Мал. 1.11. Зовнішній вигляд форми.
Загальна характеристика більшість об’єктів
Хоча кожний об’єкт в Visual Basic має власний набір властивостей, існують деякі властивості, загальні практично для всіх об’єктів. Нижче перераховані найбільш важливі із загальних властивостей:
• Left (ліва границя) • Name (назва)
• Top (верхня границя) • Enabled (дозволено)
• Height (висота) • Visible (видимий)
• Width (ширина) • Index (індекс)
Місце положення об’єкта
Властивості об’єкта Left і Top визначають його положення на екрані або всередині контейнера де він знаходиться. Властивість Left вказує відстань від лівої границі об’єкта до лівої рамки контейнера. Властивість Top задає відстань від верхньої границі об’єкта до верхньої рамки контейнера. Для форм ці відстані змінюються від лівої і верхньої рамок екрану. Властивості Heidht і Width визначають розмір об’єкту. Ці чотири властивості показано на мал. 1.12.
Мал. 1.12. Розміри і положення об’єкту.
Видимість об’єкту
Властивість Visible і Enabled мають значення True (правда) або False (не правда). Ці властивості визначають, чи може користувач бачити даний об’єкт і взаємодіяти з ним. Якщо властивість Visible має значення False, об’єкт не відображається, і користувач навіть не знає про його існування. При установці властивості Visible в True об’єкт відображується. Якщо властивість Enabled має значення False, то об’єкт видимий, але користувач не може з ним взаємодіяти. Звичайно, якщо об’єкт заблокований, то він відображається на екрані сірим кольором. Завдяки тому, користувач візуально може визначити, що об’єкт недоступний.
Назва об’єкта
Іншою ключовою властивістю об’єкта в Visual Basic є властивість Name. Ця властивість задає унікальний ідентифікатор, за допомогою якого до даного об’єкту звертатися із програми. Кожна форма, текстове вікно, мітка та ін. повинні мати унікальну назву.
Що стосується назви об’єкту, хороший стиль програмування передбачає використання префікса для визначення типу об’єкта який називається. В таблиці 2.1. Перераховані стандартні префікси для багатьох об’єктів Visual Basic.
Таблиця 1.1.
Префікси, які вказують на тип об’єкту
Тип об’єкту Префікс Тип об’єкту Префікс
CheckBox Chk Image Img
CommmadButton Cmb Label Lbl
PictureBox Pic TextBox Txt
Frame Fra OptionButton Opt
Shape Shp Line lin
Для того, щоб задати властивість об’єкта Name, достатньо вибрати цю властивість у вікні властивостей і ввести нове ім’я. У вікно властивостей можна попасти клацнути по вікні Properties або вибрати елемент Properties в меню View. Вікно властивостей показано на мал. 1.13.
Мал. 1.13. Вікно властивостей.
Використання методів
Форми і елементи керування в Visual Basic – це не просто пасивні компоненти які відображаються на екрані. Ці об’єкти можуть виконувати деякі функції. Подібно до того, як властивості об’єкта визначають його вигляд і поведінку, методи описують задачі, які виконуються цим об’єктом. Задачі можуть бути як простими, наприклад, переміщення об’єкта в інше місце, так і більш складними.
Фактично, метод – це фрагмент програмного коду, який містить об’єкт. Використовуючи вміщений метод, об’єкт може виконувати задачу, яка перед ним стоїть; ніяких додаткових команд не потрібно.
Як і у випадку з властивостями, кожний тип об’єкта має різні методи і різну їх кількість. Простий об’єкт типу мітки має мінімум методів. Складні об’єкти, наприклад, форма може мати більше десятка методів.
Не дивлячись на те, що для різних об’єктів існують різні методи, багато об’єктів мають наступні спільні методи:
Drag (перенести) – в межах контейнера керує операцією користувача “перенести і відпустити” об’єкт
Move (перемістити) – обробляє запит програми на зміну місце положення об’єкта.
Обробка подій
Крім виконання різни задач, об’єкти в програмі можуть реагувати на дії оператора або інших зовнішніх впливів. Ці дії обробляються за допомогою подій. В розділі опису об’єкту вказуються на які події цей об’єкт реагує.
Події виникають кожний раз, коли користувач виконує з елементом керування деякі дії, наприклад, клацає по командній кнопці або змінює вмістиме текстового вікна. Для того, щоб прикладна програма реагувала на події, потрібно написати код для процедур обробки цих подій.
Зв’язок між властивостями і методами
Можна подумати, що всі елементи існують незалежно один від одного, але це не завжди так. Інколи властивості і методи об’єкта зв’язані між собою. Тобто при виклику методу деякого об’єкта властивості цього об’єкта можуть змінюватися. Крім того, частіше всього виклик методів об’єкта або змінні його властивостей з програми відбувається тоді, коли обробляється деяка подія.
Приклад взаємозв’язку між методами і властивостями об’єкта можуть служити використання метода Move, за допомогою якого міняються властивості Left і Top. Змінити місцезнаходження об’єкта можна або за допомогою метода Move, або шляхом заміни значень властивостей Left і Top. Наприклад:
‘ переміщення текстового вікна шляхом змінни властивостей
‘****************************************************
txtMove.Left = 100
txtMove.Top = 100
‘ переміщення текстового вікна за допомогою методу Move
‘****************************************************
txtMove.Move 100, 100
Аналогічним чином, методи Show і Hide застосовні до форми дають той же результат, як і зміна властивості Visible. Виклик методу Hide аналогічний установці властивості Visible в стані False. (В результаті цього форма зникає з екрану). Подібним чином, метод Show дає той же результат, що і установка Visible в стані True.
Основним елементом візуального інтерфейсу для програм на Visual Basic – це форма. Форма являє собою контейнер для інших елементів керування, які утворюють в сукупності інтерфейс користувача.
Форма – це не тільки простий контейнер. Форми мають властивості, які керують їх виглядом і поведінкою, і методи, які дозволяють виконувати різні задачі. Форми реагують на події як і всі інші елементи керування. Форма може відображати текст і графіку, без допомоги інших елементів керування.
Складові компоненти форми
Після запуску Visual Basic або при відкриті нового проекту розробник попадає в середовище проектування, зображену на мал. 1.14.
Мал. 1.14. Середовище проектування.
Як видно на мал. 1.14, форма Visual Basic має всі елементи, які потрібні у вікні прикладної програми. Вона має заголовок, системне меню і набір кнопок: Minimize (згорнути), Maximize (розгорнути) і Close (закрити). Крім того форма має сітку для проектування, яка дозволяє легко вирівнювати елементи керування в розробляємому інтерфейсі.
Керувати сіткою можна за допомогою діалогового вікна Options, яке показано на мал. 1.15. Для доступу до нього потрібно вибрати елемент Options в меню Tools. В даному вікні можна змінювати крок сітки і також зовсім її відключити. Можна також вказати, чи потрібно щоб елементи керування автоматично вирівнювалися по сітці. Якщо дана опція включена, то верхній лівий кут кожного елемента керування вирівнюється по крапці сітки. В цьому випадку легко точно розмістити положення елементів керування.
Мал. 1.15. Вікно Options.
Визначення властивостей
Форми, як і більшість об’єктів, які використовують у Visual Basic, мають набір властивостей, які керують поведінкою і виглядом цих форм. В цьому розділі будуть розглядатися деякі основні властивості форми, а також ті, якими можна керувати в процесі проектування програми і під час виконання. В табл. 1.2. перераховані деякі ключеві властивості форми і коротко описано призначення кожної з них. Також в таблиці показано, чи може властивість мінятися в ході виконання програми.
Таблиця 1.2.
Основні властивості для керування формами
Назва властивості Опис Чи може змінюватися при виконанні програми
BorderStyle Визначає тип облямовки, яка використовується для форми Ні
ControlBox Визначає, чи видно вікно елемента керування при роботі програми Ні
Font Визначає шрифт Так
Icon Визначається значок, коли форма згорнута Так
MaxButton Визначає, чи відображується кнопка Maximize Ні
MinButton Визначає, чи відображується кнопка Minimize Ні
WindowState Визначає, чи відображується форма в розготнутому, згорнутому або нормальному стані Так
StartUpPosition Визначає початкове положення форми при першій її появі Так
Тепер розглянемо деякі з цих властивостей детальніше. Властивість BorderStyle має шість можливих значеннь, керуючих типом облямівки форми. За допомогою цих значень вказується, чи можна міняти розмір форми, клацнувши і розтягнувши облямівку, вони також керують кнопками, розміщені в середині форми, і навіть контролювати висоту рядка заголовку форми. В табл. 1.3. Перераховані можливі значення властивостей BorderStyle. Ефект від застосування різних значень показано на прикладі форм на мал. 1.16.
Мал. 1.16. Різні види форми при зміні значення властивості BorderStyle.
Таблиця 1.3.
Значення і результати властивості BorderStyle
Значення Результат
0 – None Форма відображується без облямівки. Також не висвітлюються рядок заголовку і кнопки керування
1 – Fixed single Використовується облямівка у вигляді однієї лінії. Форма відображується з рядком заголовка і з кнопками елементів керування. Користувач не може змінити розмірів форми
2 – Sizable Оформлення форми вказує на те, що розміри можна змінювати. Відображується рядок заголовку і кнопки керування. Користувач може міняти розміри форми.
3 – Fixed Dialog Така форма має фіксовану облямівку. В формі є рядок заголовку, вікно керування і кнопка Close. Розміри форми змінювати не можна.
4 – Fixed ToolWindow Відображується тільки рядок заголовку і кнопка Close. Вони показані з використанням шрифта зменшеного вигляду
5 – Sizable ToolWindow Аналогічно значенню Fixed ToolWindow, за винятком того, що розміри форми можна змінювати
В табл. 1.3. для деяких значень властивостей BorderStyle в рядку заголовку форми висвітлюється вікно керування і кнопки Minimize, Maximize і Close. Цей режим заданий по замовчуванню. Але, навіть для облямівок даних типів появою цих елементів у формі можна керувати. Кожна з властивостей ControlBox, MaxButton і MinButton – має стан True або False, який визначає, чи з’являється конкретний елемент у формі. Якщо деяка властивість встановити у False, то відповідний елемент у формі не відображається. Ці властивості можна міняти тільки на етапі проектування.
Властивість Font дозволяє задати основний шрифт і його характеристики для будь-якого тексту, відображеного в середині форми. В формі текст вводиться за допомогою методу Print.
Остання властивість про яку потрібно сказати, – StartUpPosition. Дана властивість визначає місцеположення форми при першій її появі. Ця властивість має чотири можливих значення, які перераховані в табл. 1.4.
Таблиця 1.4.
Значення і результати властивості StartUpPosition
Значення Результат
0 – Manual Початкове положення визначається властивістю форми Top і Left
1 – CenterOwner Центрується в батьківському вікні, якщо вона є формою-нащадком MDI
2 – CenterScreen Форма центрується на екрані
3 – Windows Defaul Форма розміщується в лівий верхній кут екрану
Відображення форми
Якщо в програмі є тільки одна форма, то не потрібно переживати про те, як її відображувати або ховати. Це відбувається автоматично при запуску програми і при виході з неї. Але, якщо форм багато – то потрібно мати засіб для відображування і ховання різних форм, які входять в проект. Цим процесом керують два оператора Visual Basic і два метода форми: оператори Load (загрузити) і Unload (вигрузити) і методи Show (показати) і Hide (сховати).
Оператор Load розміщує форму в пам’яті, де вона стає доступною і її властивості можна змінювати. Цей оператор не відображує форму. Приклад використання оператора:
Load frmMember
Для відображення форми потрібно використовувати метод Show. Цей метод працює незалежно від того, чи була форма попередньо завантажена в пам’ять чи ні. Якщо форми в пам’яті не має, то метод Show виконує операцію завантаження, а потім відображує форму. Метод Show використовується так:
frmMember.Show
Після того, як форма виведена на екран, її можна забрати двома способами. Метод Hide знищує форму з екрану, але не з пам’яті. Це корисно тоді, коли потрібно тимчасово знищити форму. Частіше всього форми знищуються і з екрану, і з пам’яті. Для знищення форми з пам’яті потрібно використати оператор Unload. Якщо в момент виконання цього оператора форма знаходиться на екрані, то вона спочатку знищиться з екрану а потім – з пам’яті. Синтаксис оператора Unload наступний:
Unload frmMember
Обробка подій (Load і Activate)
В розділі “Обробка подій” було сказано, що більшість об’єктів реагує на події користувача, програми або операційної системи. Застосовно до форм, в кожній програмі виникають чотири події:
Load Виникає при завантажені форми в пам’ять
Activate Виникає при першому відображенні форми або коли користувач повертається до даної форми з другої форми
Deactivate виникає в тому випадку, коли користувач переходить до другої форми або коли форма знищується з пам’яті
Unload Виникає в тому випадку, коли форма вивантажується із пам’яті
При виникненні перерахованих подій можна використати програмний код для визначення властивості форми або її елементів керування. Подій Load і Unload відбуваються в житті форми тільки один раз: при завантажені форми і при її вивантажені. Події Activate і Deactivate, напроти, виникають багато раз.
В наступному фрагменті коду показано декілька простих, але корисних дій, які можна виконати при обробці події Load. На першому прикладі показано, як форму можна центрувати на екрані.
Private Sub Form_Load ( )
Dim LeftPos, TopPos As Integer
LeftPos = Int ((Screen.Width – Me.Width) / 2)
TopPos = Int ((Screen.Height – Me. Height) / 2)
Me.Left = LeftPos
Me.Top = TopPos
End Sub
Зверніть увагу на те, що для посилання на форму використовується ключове слово Me. Завдяки цьому даний код легко використовувати в різних формах.
Використання елементів керування
Форми являють собою вікна прикладної програми; але велику частину функцій програми виконують елементи керування Visual Basic. Ці елементи керування дозволяють відображувати і редагувати текст, виводити зображення і виконувати багато інших задач. Існують елементи для текстового редагування, для відображення графіки.
Призначення елементів керування
Елементи керування – це об’єкти Visual Basic, розроблені для рішення означених задач. Практично, кожний елемент керування являє собою міні-програму, яка приймає ввід і забезпечує вивід безпосередньо своїх властивостей. Наприклад, при використані текстового вікна задавати властивості, які визначають розмір цього вікна, шрифт для відображення тексту і його колір. Це текстове вікно настроюється так, щоб вірно передавати розмір і вигляд тексту з врахуванням встановлених значень властивостей.
Visual Basic доставляється з стандартним набором елементів керування, і які дозволяють розв’язувати різні задачі. Ці елементи керування і їх функції перераховані в табл. 1.5. і показані на панелі елементів керування на мал 1.17.
Таблиця 1.5.
Стандартні елементи керування Visual Basic
Назва елементів керування Функції
PictureBox Відображує графічні зображення, а також є контейнером для інших елементів керування
Label Відображує текст
TextBox Відображує текст і дозволяє користувачу вводити і редагувати текст
Frame Контейнер для інших елементів керування
CommandButton Дозволяє користувачу ініціювати деякі дії, клацнувши по кнопці
CheckBox Дозволяє користувачу визначити параметри True/False
OptionButton Дозволяє користувачу вибрати одну опцію з множини
ComboBox Дозволяє користувачу вибрати опції із списку або вводити нове значення
ListBox Дозволяє користувачу вибрати опції із списку
H. SchrollBar Дозволяє користувачу вибирати значення по розміщенню кнопки на горизонтальній смузі прокрутки
V. SchrollBar Дозволяє користувачу вибирати значення по розміщенню кнопки на вертикальній смузі прокрутки
Timer Дозволяє програмі виконувати певні дії, які пов’язані з інтервалом часу
Drive List Box Дозволяє користувачу вибрати диск
Directory List Box Дозволяє користувачу вибрати каталог або папку
File List Box Дозволяє користувачу вибрати файл
Shape Відображує в середині форми геометричні фігури
Line Відображує в середині форми лінію
Image Відображує значки і графічні зображення
Мал. 1.17. Елементи керування Visual Basic.
Добавлення до форми елементів керування
Для того щоб використовувати який-небудь із елементів керування, спочатку їх потрібно добавити до форми. Для добавлення деякого елемента керування достатньо вибрати потрібний елемент на панелі елементів і потім намалювати його у формі, клацнувши по ній і перемістивши мишку, задаючи тим самим розмір елемента.
Робота з текстовими елементами
Дуже часто програмісти працюють з текстами і рядками. Під текстом розуміють не рядки і параграфи, з якими мають справи текстові редактори. При обробці тексту в програмах потрібно також виводити або отримувати окреме слово, число та ін. Кожний з перерахованих атрибути можна обробляти за допомогою елементів керування Visual Basic для відображення і редагування тексту.
Visual Basic має декілька елементів керування, які дозволяють працювати з текстом. Два найбільш важливих елемента – Label і TextBox.
Використання елемента Label для виводу тексту
Найпростіший елемент керування, який служить для відображення тексту – це Label (мітка). Частіше всього він використовується для відображення різних атрибутів форми. В цьому випадку кожна мітка, як правило, задається при проектуванні, і необхідний текст приписується властивості Caption за допомогою діалогового вікна Properties.
В той час як властивість Caption мітки має текст для виводу, існують і інші властивості елемента керування Label, які впливають на спосіб відображення цього тексту. Найбільш очевидні з них – властивості Font і ForeColor, які визначають шрифт і колір тексту, відповідно. Але, якщо мітка відображує дуже багато символів, то самою потрібною буде властивість AutoSize (автоматична настройка розміру) і WordWrap (переніс слів).
Властивість WordWrap визначає, чи може текст в мітці займати декілька рядків. Якщо властивість має значення False, то текст може появитися тільки в одному рядку. Якщо він довгий, то кінець тексту відрізується. Якщо властивість WordWrap має значення True, то при досягненні кінця поточного рядка текст переноситься на наступний (мал 1.18.)
Мал.1.18. Використання властивості WordWrap.
Якщо раніше відомо, який текст буде відображуватися в мітці, то для нього можна задати відповідний розмір. Але, якщо в різні моменти часу мітка відображує різний текст, то потрібно мати можливість обробляти текст невизначеної довжини. Властивість AutoSize мітки визначає, чи потрібно автоматично настроювати розмір елементу керування під текст який відображується.
Існує ще дві властивості, які час від часу приходиться використовувати з елементом Label. Це властивості Alignment (вирівнювання) і BorderStyle (стиль облямівки). Властивість Alignment визначає, як текст вирівнюється в середині мітки. Можливі значення: Left-Justified, Right-Justified і Centered (вирівнювання зліва, вирівнювання справа і центрування). Властивість BorderStyle задає одинарну облямівку навколо мітки. Коли вона має значення Fixed Single (фіксована одинарна), то мітка нагадує не редаговане текстове вікно мал. 1.19.
Мал. 1.19. Різний зовнішній вигляд елемента керування Label.
Ввід тексту за допомогою елемента TextBox
Оскільки багато програм читають і відображують текст, то одним з основних робочих елементів таких програм являються текстові вікна. Ці вікна дозволяють вводити текст і, що саме головне, дають користувачу можливість вводити і редагувати текст, а програмісту – можливість отримувати введену інформацію.
В багатьох випадках текстові вікна використовуються для вводу деякої інформації, наприклад, імена або адреса. При цьому текстові вікна можуть обробляти до 64000 символів даних. Вся інформація, яка відображується в текстовому вікні, зберігається у властивості Text – в головній властивості, з якою взаємодіють прикладні програми.
Для обробки великих текстів вікно має дві властивості: MultiLine (багато рядків) і SchrollBar (смуга прокрутки).
Властивість MultiLine визначає, відображується інформація в текстовому вікні в одному рядку або в багатьох. Якщо ця властивість встановлена на True, то текст розбивається на багато рядків і виконує автоматичний переніс слів. Властивість SchrollBar вказує, чи відображується в текстовому вікні смуга прокрутки і, якщо відображується, то визначає її тип. Смуги прокрутки потрібні тоді, коли властивість текст зберігає текст більший чим входить в текстове вікно. Можна вказати , що текстове вікно має горизонтальну або вертикальну смугу прокрутки, а можуть бути обидві. Властивість SchrollBar впливає на текстове вікно тільки тоді, коли властивість MultiLine встановлена на True. На мал. 1.20. Показано, як працюють властивості SchrollBar і MultiLine.
Мал. 1.20. Різний зовнішній вигляд елемента керування TextBox.
Вибір альтернативних варіантів
Інколи необхідно, щоб користувач міг вибрати ті чи інші можливості. Можуть бути альтернативи “так” або “ні”, а може бути вибір з декількох опцій. Для обробки альтернатив Visual Basic має два елемента керування: CheckBox і OptionButton.
Елемент CheckBox дозволяє користувачу вибирати одну з двох можливостей: “так” або “ні”. При клацанні стан “флажка” міняється на протилежний. Стан “так” відмічається галкою в середині “флажка”. В стані “ні” значок “флажка” пустий. Стан “флажка” зберігається в елементі керування: нуль відповідає не вибраному “флажку”, і одиниця – вибраному. Ці стани показані на мал. 1.21.
Мал. 1.21. Альтернативні варіанти.
Якщо альтернатив декілька, то можна використовувати кнопки-перемикачі (option button). Ці кнопки завжди групуються для того, щоб можна було вибрати одне значення з декількох. Коли перемикачі розміщуються у формі, вони створюють групу перемикачів. Всередині такої групи в кожний момент часу може бути вибрано тільки одна кнопка. При виборі деякої кнопки інші кнопки групи обнуляються. Коли кнопка вибрана, її властивість-значення рівне True. Для інших кнопок властивість-значення рівне False. Визначити, яка кнопка натиснута, можна, провіривши властивість-значення всіх кнопок в групі за допомогою послідовності операторів If, як показано у фрагменті програми. Використання цих перемикачів показано на мал.2.22.
If optGreen.Value Then
s = ”Green”
ElseIf optBlue.Value Then
s =”Blue”
ElseIf optRed.Value Then
s =”Red”
EndIf
Мал. 2.22 Кнопки-перемикачі.
Виконання операцій
Останнім елементом керування, потрібним для більшості програм, є елемент CommandButton. Звичайно цей елемент керування використовується для того, щоб користувач програми міг запустити деякі операції. Створити елемент CommandButton неважко. Кнопка малюється у формі, а потім в її властивості Caption вводиться текст, який повинен відображуватися. Для активізації кнопки потрібно створити код для події Click.
Мал. 2.23. Командні кнопки.
1.3. Основні відомості про моделі програмування, які керуються подіями.
• Програми слідують за діями користувача
Програми, які керуються подіями, дозволяють користувачу виконувати задачі практично в будь-якому порядку. Користувачі можуть обробляти інформацію найбільш зручним для себе чином
• Новий підхід до програмування
Програми з обробкою подій значно відрізняються від традиційних процедурних програм.
Хоч концепція програм, події які керуються, ідея обробки події не являються. Обробка подій є в багатьох об’єктах в реальному світі. Розглянемо, наприклад телевізор. Можна вибирати будь-який канал і при наявності сучасних пультів дистанційного керування можна безпосередньо переходити до потрібного каналу, а не перебирати всі телевізійні програми. За допомогою цього ж пристрою можна навмання встановлювати гучність звуку. Такий тип керування ілюструє програмування з обробкою подій. Користувач телевізора ініціює події (натискаючи кнопки), які заставляють телевізор виконувати різні дії, а також визначає момент виникнення подій.
Програмування і події
Програми написані для Windows, роблять в залежності від моделі подій. Наприклад, коли працюючи в MicroSoft Word, можна легко міняти шрифт або стиль текстових фрагментів. Можна також виділити фрагмент і перенести його на нове місце. Кожна з таких операцій стала можливою завдяки здатності програми виконувати дії у відповідь на події.
При розробці власних програм для Windows будується модель програми, наближена до реальних задач, які додатки будуть виконувати. Це означає, що користувач отримує в своє розпорядження командні кнопки або меню, які дозволяють вирішувати задачі.
Наприклад, можна запрограмувати події так, щоб перевірка введеної інформації виконувалась зразу ж після того, як користувач закінчить ввід. Потім, якщо при вводі виникне помилка, користувач зразу ж про це інформується і може їх виправити. Такий зворотній зв’язок реалізується з допомогою коду, аналогічний показаному в наступній програмі, де перевіряється значення віку, введеного користувачем.
Private Sub txt_LostFocus ()
Dim InptAge As Integer
InptAge = Val(txtAge.Text)
If InptAge <=0 then
MsgBox “ви повинні ввести вік більший 0”, vbCritical
End If
If InptAge <=0 then
MsgBox “ви впевнені, що цей чоловік – такий старий”, vbCritical
End if
End Sub
Типи подій
Існують два основних типи подій, які можуть зустрічатися в програмі на Visual Basic: подій користувача і системі подій. Частіше всього пишеться код для події користувача. Ці події дозволяють операторам, які працюють з програмою, керують її виконанням. Тобто, користувачі можуть в будь-який момент виконувати деякі дії, які дозволяють їм практично повністю керувати програмою.
Події користувача
Події користувача – такі події, які виникають по ініціативі користувача. Як не важко догадатися, до таких відносяться натискання кнопок клавіатури і миші; але є і інші події. Наприклад, коли оператор клацає по текстовому вікні для початку редагування в ньому текст, для даного текстового вікна виникає подія Click. Можна не догадатися про те, що виникають і інші події. Одна з них – GotFocus (отриманий фокус). Ця подія виникає кожний раз, коли користувач входить в текстове вікно. Крім того, якщо одне текстове вікно отримує програмний фокус, то деякий інший елемент повинен його втратити. Тому для цього іншого елементу керування генерується подія LostFocus (втрачений фокус). Обидві події викликані користувачем, як і подія Click.
Основні події
Хоч існують багато подій, на які можуть редагувати форми і елементи керування, є декілька подій, загальних для більшості них:
Change – виникає при змінні тексту в текстовому вікні
Click – виникає при клацанні по об’єкту основною кнопкою миші
DblClick – виникає при подвійному клацанні по об’єкту основною кнопкою миші
DragDrop – виникає при переміщенні елемента керування в інше місце
DragOver – виникає в тому випадку, коли деякі об’єкти переміщуються через зображення елемента керування
GotFocus – виникає в тому випадку, коли об’єкт отримує фокус
KeyDown – виникає при утримані деякої кнопки в той момент, коли об’єкт має фокус
KeyPress – виникає при натисканні і відпусканні деякої кнопки в той момент, коли об’єкт має фокус
KeyUp – виникає при відпусканні деякої кнопки в той момент, коли об’єкт має фокус
LostFocus – виникає при переході фокуса від одного об’єкту до іншого
MouseDown – виникає при отриманні кнопки миші в той момент, коли об’єкт має фокус
MouseMove – виникає в той момент, коли курсор миші переміщується через об’єкт
MouseUp – виникає при відпусканні кнопки миші в той момент, коли об’єкт має фокус
Створення процедур для обробки подій
Як при виникненні всіх перерахованих подій заставити програму реагувати на них, і як вибрати тільки ті події, які необхідні? Відповідь на обидва запитання одна і та ж. Для обробки будь-якої події для неї потрібно написати програмний код. Будь-яка подія, яка не має коду, ігнорується. Тому виникає запитання як написати код для деякої події?
Для того щоб написати код, спочатку потрібно зайти у вікно редагування програмного коду. Для цього можна клацнути по деякому елементу керування в середині форми, або клацнути по кнопці View Code (Перегляд вікна) у вікні проектів. В результаті з’явиться вікно коду (мал.1.24)
Мал 1.24. Вікно коду.
У вікні коду можна вибирати об’єкт і подію, для якої потрібно писати код. Після того як вибір зроблено, Visual Basic автоматично створює шаблон процедури з її ім’ям і оператором End Sub. Зверніть увагу на те, що ім’я процедури для деякої Event має ім’я об’єкту і назву події. Після цього можна писати програмні оператори для виконання необхідних дій при виникненні даної події. В наступному фрагменті показано, як у відповідь на клацання по командній кнопці програма відображує другу форму.
Private Sub cmdShowDetail_Click ()
frmDetail.Show 1
End Sub
Множина подій для визначення дії
Одна із проблем обробки множини подій полягає в тому, що існує практично необмежена кількість комбінацій операцій користувача при роботі з програмою. Наприклад, як оператор перейшов в текстове вікно: за допомогою миші або безпосередньо натиснувши кнопку <Tab>? Де був фокус перед тим: на іншому текстовому вікні або на командній кнопці? І що виникне при переході від однієї форми до іншої? Як можна побачити, число можливих варіантів практично необмежено.
Потрібно зазначити, що для більшості подій код писати не потрібно. Це означає, якщо подія виникне, програма проігнорує її і вони не викличуть ніяких проблем.
Хоч той факт і спрощує обробку множини подій, проблема в цілому не зникне. Для того щоб розібратися з нею, розглянемо деякі прості послідовності подій, які виникають по ініціативі користувача.
По-перше, проаналізуємо просте натискання кнопки. Кожний раз, коли користувач натисне кнопку клавіатури виникає три події: KeyDown, KeyPress, KeyUp. Якщо виявилось, що при натисканні кнопки фокус перейшов від елемента керування до іншого, то виробляється дві додаткові події: LostFocus – для поточного елемента, і GotFocus – для нового елемента.
Потім розглянемо звичайне клацання мишкою. Це проста дія користувача збуджує три події: MouseDown, MouseUp і Click. Якщо користувач двічі клацне кнопкою миші, після події Click виникають ще дві події: DblClick і – повторно – MouseUp. Крім того, якщо після клацання миші фокус перейшов від одного елемента керування до іншого, генеруються також події LostFocus і GotFocus.
1.4. Використання меню і діалогових вікон
Керування програмою за допомогою меню
В програмах передбачається багато функцій для користувача. Багато програм мають файлові функції, які дозволяють створювати, редагувати і запам’ятовувати файли. Крім того є функції, специфічні для конкретної програми.
Одна із найголовніших задач в будь-якій програмі – дати можливість користувачу вільний доступ до всіх функцій програми. Звичайно для цього достатньо один – максимум два рази – клацнути мишкою. Для цього в програмах використовується меню. Visual Basic дозволяє швидко і легко створювати меню за допомогою Menu Editor (Редактор меню). За його допомогою будуються меню, розміщених у її верхній частині форми, або меню які розкриваються, доступ до яких звичайно забезпечується при клацанні правої кнопки миші.
Створення панелі меню
Перші кроки при створені меню – визначення функцій, які включаються в меню, і їх організація.
При створені меню потрібно згрупувати зв’язані елементи. Нижче перераховані деякі стандартні елементи, які зустрічаються в багатьох меню:
File (Файл) Це меню має в собі всі файлові функції, які зв’язані з відкриттям і закриттям файлів: New (Створити), Open (Відкрити), Close (Закрити), Save (Зберегти).
Edit (Правка) Меню Edit має в собі функції, які зв’язані з редагуванням тексту. До типових операцій цього меню відносяться: Cut (Вирізати), Copy (Копіювати), Paste (Вставити) і Clear (Очистити).
Help (Допомога) Меню Help забазпечує доступ до довідкової системи прикладної програми.
Компонування основних опцій меню
Після того, як функції, які входять в меню, і їх групи визначені, можна будувати саме меню. Для цього спочатку потрібно відкрити форму, а потім запустити Menu Editor одним з трьох способів: клацнувши по кнопці Menu Editor на панелі інструментів, вибравши Menu Editor з меню Tools або нажавши <Ctrl>+<E>. З’явиться Menu Editor (мал.1.25.)
Мал. 1.25. Вікно Menu Editor .
Після входу в Menu Editor можна розпочинати ввід опцій меню. Для кожного елемента, потрібно ввести значення для властивості Caption і Name. Властивість Caption визначає ім’я, яке буде бачити користувач. Властивість Name необхідна для того, щоб зв’язатись з елементом програмного коду і щоб при виборі елемента меню виконати необхідні дії.
Після того як інформація для одного пункту меню введена, потрібно натиснути <Enter>. Після закінчення вводу можна підтвердити його, нажавши кнопку Ok в Menu Editor. Меню з’явиться у формі і буде мати вигляд, аналогічний мал. 1.26.
Мал 1.26. Форма з головним меню.
Ієрархічне меню
Після того як за допомогою Menu Editor введені деякі елементи меню, з’явиться послідовність опцій, розміщених тільки на панелі меню. Крім головного меню ніяких елементів не з’явиться. Щоб вирішити цю проблему, використовується ієрархічне меню. Перший рівень меню являє собою розкриваючий список опцій, який появляється, якщо клацнути мишею по деякому елементу на панелі меню. Це показано для меню File на мал. 1.27.
Мал. 1.27. Меню з рівнями опцій.
Меню з різними рівнями опцій створювати неважко. Потрібно просто добавити елементи до меню. Для того щоб зробити відступ, потрібно вибрати елемент в області вибору Menu Editor, а потім клацнути по кнопці відступу “стрілка вправо”. На мал.1.28. Показано редактор Menu Editor для меню File.
Мал. 1.28. Вікно Menu Editor.
Написання коду для елементів меню
Після того як структура меню створена, необхідно написати код для виконання реальних задач. Як і у випадку форм або елементів керування, для опцій меню потрібно створити код процедури Event. Елемент меню може обробляти тільки одну подію: Click. Ця подія виникає, коли користувач клацає по елементу меню.
Для того щоб ввести код для події Click опції меню, потрібно вибрати елемент меню в середині форми, клацнувши по ньому. При цьому завантажиться редактор коду і буде створена процедура Event для вибраного елемента.
Вивід інформації для користувача
Значну роль в будь-якому програмному проекті відіграє інформація, яку користувач отримує для слідкування ходу виконання програми і її стан. Форми і елементи керування в програмі є основним інтерфейсом користувача, але вони не завжди є кращим засобом виводу інформації для оператора, наприклад, попередження або повідомлення про помилки. В подібному випадку краще всього використовувати вікна повідомлень (message box).
Вікно повідомлень являє собою просту форму, яка має в собі деяке повідомлення і принаймні одну командну кнопку, яка використовується для підтвердження повідомлення. При необхідності вікно повідомлень може відображувати значок або має декілька командних кнопок, які дозволяють користувачу зробити вибір. В залежності від поставленої задачі вікно повідомлень можна застосовувати в двох випадках. Можна просто вивести деяку інформацію, а можна використовувати вікно повідомлень для надання користувачу деякого вибору. В цих випадках при виводі інформації застосовується функція MsgBox. Ця функція дозволяє вивести повідомлення, написавши тільки один програмний рядок. Наприклад, наступний оператор виводу вікна повідомлення, показано на мал. 1.29.
MsgBox “Ви навчаєтесь на 5”, 52
Мал. 1.29. Вікно повідомлень з командними кнопками.
Вивід повідомлення
Простіше всього створити в програмі вікно повідомлення, якщо використовувати функцію MsgBox, не повертає значення. Для цього достатньо вказати тестове повідомлення і викликати функцію. В найпростішому випадку у вікні повідомлень відображується тільки кнопка “Да”. Вона слугує для того, щоб користувач підтвердив повідомлення. Наступний оператор створює просте повідомлення:
MsgBox “Вставте дискету в дисковод А:”
Просте вікно повідомлення застосовується в багатьох випадках, але його функції можна розширити. У функцію MsgBox має два факультативних параметри: options і title. Параметр options являє собою ціле число, яка має в собі інформацію про значка, яка відображується у вікно повідомлень, наборі командних кнопок і про те яка командна кнопка вибрана по замовчуванню. Параметр title є параметр текстового рядка, яка має в собі текст користувача, який відображується в рядку заголовку вікна повідомлень.
Можна вибрати один з чотирьох значків, який може бути присутнім визначений текст користувача. Ці значки і їх призначення приведені в табл. 1.6.
Таблиця 1.6.
Значки типів повідомлень.
Значок Назва значка
Критична ситуація
Попередження
Запит
Повідомлення
Для того щоб використовувати у вікні повідомлень деякий значок, потрібно визначити значення параметру options для функції MsgBox. Цей параметр може мати одне з перерахованих нижче значень. Допускається використовувати цифрове значення або константу.
Таблиця 1.7.
Типи повідомлень і значення параметра options.
Типи повідомлень Значення параметра options Константа
Критична ситуація 16 VbCritical
Запит 32 VbQuestion
Попередження 48 VbExclamation
Інформація 64 VbInformation
Функція MsgBox, яка повертає значення
Функція MsgBox зручна для виводу інформації. Але, якщо необхідно взнати, який вибір зробив користувач, то слідує отримати від функції деяке значення. В цьому випадку при використані функції виникають дві відмінності: значення функції присвоюється деякій змінні і параметр функції береться в круглі дужки. Значення яке повертається визначає, яку командну кнопку натиснув користувач.
Usrchc = MsgBox (“Ви вибрали невірне значення”), vbRetryCancel)
У функції можна використовувати шість наборів командних кнопок:
Таблиця 1.8.
Набір кнопок і відповідне значення параметра options.
Набір кнопок Значення Константи
OK 0 VbOKOnly
OK, Cancel 1 VbOKCancel
Abort, Retry, Ignore 2 VbAbortRetryIgnore
Yes, No, Cancel 3 VbYesNoCancel
Yes, No 4 VbYesNo
Retry, Cancel 5 VbRetryCancel
Оскільки параметр options керує відображенням значків і набір константних кнопок у вікні повідомлень, можна поцікавитись тим, як це здійснюється одночасно. Для цього значення констант додаються. Функція аналізує ці значення і розбиває на конкретні елементи. Наприклад:
Optval = vbExclamation + vbAbortRetryIgnore
Retval = MsgBox (“Ви впевненні”, optval)
Мал. 1.30. Результат значення параметра options.
Існує сім кнопок, які може вибрати користувач із врахуванням того, яки набір використовується у вікні повідомлень. Для ідентифікації кнопок з програми кожна із них повертає значення. Ці значення приведені в табл. 1.8.
Таблиця 1.9.
Значення після натискання на одну з кнопок.
Кнопка Значення Константа
OK 1 Vbok
Cancel 2 VbCancel
Abort 3 VbAbort
Retry 4 VbRetry
Ignore 5 VbIgnore
Yes 6 VbYes
No 7 VbNo
Отримання інформації від користувача
Дуже часто в програмах потрібно отримати від користувача різну інформацію. Вікно повідомлень дозволяє користувачу програми робити вибір, але не дають можливість вводу даних у відповідь на повідомлення. А це означає для вирішення цієї задачі необхідно мати деякі засоби. Для цього у Visual Basic є спеціальне діалогове вікно: вікно воду (input box).
Вікно воду має в собі повідомлення, яке вказує користувачу що потрібно ввести, текстове вікно, де вводяться данні, і дві команді кнопки – OK і Cancel – для підтвердження або відмінні введених даних. Просте вікно вводу показано на мал. 1.31.
Мал. 1.31. Вікно вводу інформації користувачем.
Настройка діалогового вікна вводу
Вікно вводу багато в чому нагадує вікно повідомлень з значенням яке повертається. В якості параметрів функції потрібно вказати зміну, яка приймає інформацію від вікна вводу, повідомлення, заголовок (при необхідності). Функція вікна вводу виглядає наступним чином:
Userinput = InputBox (prompt)
В цьому операторі userinput – змінна, яка має інформацію, введену користувачем у вікні вводу. InputBox – це назву самої функції.
Параметр prompt являє собою повідомлення, яке виводиться оператору і яке вказує на те, що потрібно ввести.
У функції InputBox визначаються тільки дві командні кнопки OK і Cancel. Наприклад:
Inptval = InputBox (“Скільки вам років ”)
If Len (Inptval) = 0 Then
MsgBox “Ви забули вказати ваш вік”
Else
If Val(Inptval) = 0 Then
MsgBox “Ви ввели не число”
Else
MsgBox “Хороший вік!”
End If
End If
1.5. Програмування на Visual Basic
Форми і елементи керування Visual Basic утворюють інтерфейс для користувача прикладних програм; фактичну роботу виконує програмний код. Visual Basic є дуже сильний, достатньо просту у користуванні мову програмування. Ця мова базується на давно відомій мові BASIC.
Але мова Visual Basic була розширена для того, щоб можна було легко керувати програмою за допомогою структур розгалуження і циклів. Мова була адаптована так, щоб полегшити програмістам роботу з об’єктами і елементами керування Visual Basic. В даному розділі розглядається базові принципи програмування на Visual Basic.
Робота із змінними
Змінні застосовуються в усіх мовах програмування для того, щоб дати ім’я деякій комірці пам’яті. Після визначення змінна вказує на одну і ту ж область пам’яті до тих пір, поки не буде знищена. Той хто створює програму не повинен вказувати явне місце зберігання даних (з цим впорається і сам Visual Basic); він повинен лише вказати ім’я, для посилання до даної області пам’яті з інших частин програми.
Ім’я змінних достатньо вільні, вони можуть бути простими, а можуть описувати ту інформацію, яку вони зберігають. Разом з тим на імена змінних існують деякі обмеження:
• ім’я повинне починатися з літери, а не з цифри або іншого символу;
• в імені не допускається крапка;
• ім’я повинне бути унікальне;
• максимальна довжина імені рівна 255 символів.
Типи змінних
Які данні можна зберігати в змінних? Найпростіша відповідь – практично любі. Змінна може зберігати число, рядок тексту та ін. Змінні можна застосовувати для зберігання будь-якої інформації, але для ефективної роботи з різною інформацією створені різні типи змінних.
В таблиці показані різні типи змінних, які застосовуються в Visual Basic. Також в таблиці показані діапазони значень.
Таблиця 1.10.
Змінні для зберігання інформації різних типів.
Тип Зберігає Діапазон значень
Integer Цілі числа Від –32768 до 32767
Long Цілі числа +/- 2000000000
Single Числа з крапкою +/- від 1Е-45 до 3Е+38
Double Числа з крапкою +/- від 5Е-324 до 1.8Е+308
Currency Числа з крапкою +/- 1Е14
String Текстова інформація До 65000 символів
Byte Цілі числа Від 0 до 255
Boolean Логічне значення True або False
Variant Будь-який тип Немає
Оголошення змінних
Як повідомити програму про те, як тип даних буде пов’язаний з деякою змінною? Насправді ж Visual Basic не потребує цього. На відміну від інших мов програмування, в Visual Basic не обов’язково оголошувати змінну. Якщо деяка змінна не оголошена, то використовується тип даних по замовчуваню, який називається варіантним (variant). Але використовувати його в загальних випадках має два недоліку: витрачається пам’ять і те, що варіантний тип може виявитися непотрібний для деяких функцій.
Хороший стиль програмування передбачає оголошення змінних перед їх використанням. Наприклад:
Dim i As Integer
Private j As Integer, x As variant
Static a As Single
Public f As Boolean
Dim, Private, Static і Public – це ключеві слова Visual Basic, які означають те, як і де можна використовувати змінну. i, j, a і f являють собою імена оголошених змінних. Як видно із синтаксу, можна в одному операторі вказувати декілька змінних.
Константи Visual Basic
Змінні – це тільки один із способів зберігання інформації в пам’яті комп’ютера. Другий спосіб – використовувати константи. Константи обробляються в програмі особливим чином. Якщо вони оголошені, то пізніше в програмі їх змінити не можна.
Visual Basic має багато різноманітних констант: для визначення кольору, коди кнопок клавіатури, константи графіки та ін.
Для багатьох функцій необхідні константи описані в довідці по цих функціях. Якщо потрібно взнати значення конкретної константи, то можна скористатися програмою перегляду об’єктів Object Browser, показаний на мал. 1.32. Для доступу до цієї програми потрібно клацнути правою кнопкою миші по її значку на панелі керування Visual Basic.
Мал. 1.32. Вікно внутрішніх констант.
Хоча в Visual Basic існує багато констант на всі випадки життя, інколи потрібно визначити власні константи. Вони визначаються за допомогою оператора Const, який визначає ім’я і значення константи, наприклад:
Const v=5
Const s = “Visual Basic”
Цей оператор нагадує оголошення змінної. Ключове слово Const вказує на те, що описується константа. І на закінчення, для визначення константи потрібно вказати знак рівності і значення яке присвоюється. Якщо описується рядкова константа, то це значення потрібно взяти в лапки.
Хоча оператор Const можна використовувати в будь-якому місці програми, краще всього описати всі константи на початку.
Оператор присвоєння
Після оголошення змінної перше, що потрібно, це запам’ятати в ній деяку інформацію. Для цього використовується оператор присвоєння. Це дуже простий оператор; вказується ім’я, після імені ставиться знак рівності, а потім – вираз. Вираз може бути символьним, комбінації інших змінних і констант або функцій. Одне зауваження – вираз повинен бути того ж типу, який має змінна. Наприклад:
k = 25
sum = 2276
d = sum / k
name = “Visual Basic”
Ці оператори аналогічні тим, які використовувались для визначення властивостей форм і елементів керування. Більшість властивостей форм і елементів керування являють собою змінні. Їх можна встановлювати на етапі проектування, а можна змінювати і під час виконання програми при допомозі оператора присвоєння. Властивість можна також використовувати в правій частині оператора присвоєння для запису його значення в деяку змінну. Наприклад:
name = txtTop.Text
Математичні операції
Обробка числових даних являють собою одну з головних задач у багатьох комп’ютерних програмах. У Visual Basic є багато різних математичних операцій, які можна використовувати в програмних операторах. Ці оператори і їх символьне позначення перераховані в табл. 1.11
Таблиця 1.11.
Математичні операції і їх символьне позначення.
Дія Операція
Додавання +
Віднімання -
Множення *
Ділення /
Ділення націло \
Модуль Mod
Піднесення до степеня ^
Приклади використання математичних операцій:
v1 = 1.25 + 3.17
v2 = 3.21 – 1
v3 = v1 + v2
v4 = v3 + 3.75 – 2.1 + 12 - 3
v4 = v4 +1
v2 = v1 * 3.7 * v1
v5 = v2 * v4 - v1 + v3
v6 = v5 / v2 - v4 * v1
v7 = v6 \ v3
v8 = v7 mod v1
v9 = 4 ^ v2
Щоб проілюструвати різницю операцій ділення, розділимо одне число на інше, використовуючи різні типи ділення. Наприклад:
Таблиця 1.12.
Різні типи ділення.
Ділене Дільник Операція Результат
5 3 / 1.6666666666667
5 3 \ 1
5 3 mod 2
Робота з рядками
В Visual Basic є тільки одна рядкова операція – конкантинація. Ця операція використовується для об’єднання декілька текстових рядка. Операція конкантинація позначається символом амперсанда (&). При об’єднані двох рядків другий рядок добавляється в кінець першої. Результатом буде рядок, який складається з обох даних рядків.
Наприклад:
s = s1 & s2
f = “Visual” & “Basic”
Розгалуження програми
Більшість операторів в програмі – це оператори присвоєння; але існують і інші оператори, необхідні для виконання більш складних задач. В загальному ці оператори називаються операторами керування.
Серед операторів керування існують оператори розгалуження або вибору. Ці оператори керують виконанням частин програми, опираючись на умову, існуюча в момент виконання операторів. Існує два основних типа операторів розгалуження: оператор If і оператор Select Case.
Оператор If
При розгалуженні програми потрібно виконувати деякий оператор (або групу операторів) тільки в тому випадку, коли умова виконується, тобто рівне True. Існує два типи оператора If для обробки умови True: оператори, які складаються з одного рядка, і багаторядкові (вложенні) оператори. Якщо умова рівна True, ще програма виконує команди, які зв’язані з оператором If. Якщо умова рівна False, то ці оператори пропускаються.
Оператор If, який складається з одного рядка
Однорядковий оператор If використовується для виконання однієї задачі, коли умова рівна True. Може виконатися одна команда, а може виконатися багато команд, коли визвати процедуру. Синтаксис однорядкового оператора If такий:
If condition Then command
Параметр condition являє собою будь-які логічні умови. Умови можуть бути наступними:
• порівняння змінної із символами, іншою змінною або функцією;
• змінна має значення True або False;
• будь-яка функція повертає значення True або False.
Параметр command являє собою задачу, яка буде виконуватися в тому випадку, якщо умова рівна True. В якості задачі може бути доступний оператор Visual Basic і навіть виклик процедур.
i = val (txtN.Text)
If i = 30 Then f = True
Умова яка виконує групу команд
Якщо в результаті аналізу умови потрібно виконати декілька команд, можна використати форму оператора If, яку називають блочними оператором If. В ній між операторами If і End If є декілька інших операторів. Якщо умова рівна True, то виконуються команди які знаходяться між операторами If і End If. Якщо умова рівна False, то програма переходить на оператор який йде за оператором End If.
Наприклад:
If a > b then
x = a
a = b
b = x
End If
Використання операції Not
Один із способів виконати один або декілька операторів для умови False – використати операцію Not. Операція Not інвертує умову яка йде за нею. Якщо умова рівна True, операція Not робить його рівним False, і навпаки.
Обробка умов True і False
Інший варіант обробки умови False дозволяє використовувати різні послідовності команд для умов True і False. Для цього використовується вітка Else оператора If Else.
If condition Then
oператори, які виконуються для умови True
Else
oператори, які виконуються для умови False
End If
Для умови True програма виконує команди, розміщені перед оператором Else, а потім переходить до першого оператора, який стоїть після End If. Якщо умова рівна False, то програма починає обробку з першого оператора, який знаходиться після Else.
If slope = 1 Then
av = to / b
h = Int (av * 0.96 * 10) / 10
Else
h = 0
av = Int (to / b *100) /10
End If
Використання вкладених операторів If
За допомогою додаткового оператора в блоці If можна провірити декілька умов. Оператор ElseIf дозволяє задавати нову умову, якщо перша перевірка дала результат False. За допомогою оператора ElseIf можна перевірити будь-яку кількість умов.
В наступному прикладі послідовність перевірок ElseIf дозволяє визначити розподіл оцінок учнів в класі.
If Grades(I) >= 90 Then
GradesDist(4) = GradesDist(4) + 1
ElseIf Grades(I) >= 80 Then
GradesDist(3) = GradesDist(3) + 1
ElseIf Grades(I) >= 70 Then
GradesDist(2) = GradesDist(2) + 1
ElseIf Grades(I) >= 60 Then
GradesDist(1) = GradesDist(1) + 1
Else
GradesDist(0) = GradesDist(0) + 1
End If
Використання оператора Select Case
Інший шлях для виконання розгалуження в програмі – використання оператора Select Case. Він дозволяє в залежності однієї змінної вибрати ту чи іншу послідовність операторів. Оператор Select Case задає обчислювальну змінну. Потім послідовність операторів Case перечислює можливі значення. Якщо значення змінної співпадає з числом, означений в операторі Case, то виконуються команди, які стоять за цим Case. Синтаксис оператора Select Case.
Select Case вираз
Case значення 1
група операторів 1
Case значення 2
група операторів 2
End Select
Оператор Case Else можна застосовувати в тих випадках, коли виконуються деякі дії для тих значень, які не вказані конкретно в операторах Case. Або з допомогою оператора Case Else можна повідомити користувача про невірне введення значення.
Наприклад:
password = Val (txtPas.Text)
Select Case Password
Case 1
to = password * 4.35
Case 2
to = password * 4.85
Case 3
to = password * 5.35
Case 4
to = password * 4.85
Case Else
txt.Edit = str (password) & “ – невірний код”
End Select
txt.Edit = str (to)
Використання циклів
Ще один важливий тип операторів керування – оператори циклу. Цикли використовуються в програмах для виконання операцій які повторяються. Visual Basic підтримує два основних типа циклів: цикли з лічильниками і умовні цикли. Цикли з лічильником застосовуються тоді, коли деяка задача виконується визначену кількість разів. Умовні цикли застосовуються для виконання деякої задачі до тих пір, поки дана умова існує.
Цикли For
Цикл з лічильником також називається циклом For або циклом For/Next. Це пояснюється тим, що вихід з циклу визначається операторами For і Next. З початку в циклі описується змінна-лічильник, а також її початкове і кінцеве значення. При виконанні першого проходу циклу лічильнику присвоюється початкове значення. Потім, при кожному новому проході циклу значення лічильника порівнюється з кінцевим. Якщо значення лічильника перевищує кінцеве, програма переходить до першого оператора, який слідує за циклом.
Змінна-лічильник змінюється кожний раз, коли цикл доходить до оператора Next. Якщо це не обговорено, то при кожному проході лічильник збільшується на 1. Щоб зручно читати програму прийнято в операторі Next вказувати ім’я змінної циклу. Це особливо важливо для вкладених циклів.
Приведений нижче приклад ілюструє використання декількох циклів For.
Dim i As Integer
For I = 0 To 22
txtM(I).Text = “”
Next I
For I = 0 To 1
cboM(I).ListIndex = -1
Next I
For I = 0 To 3
mskP(I).Text = “”
Next I
Звичайно цикл For перебирає всі значення змінної-лічильника. Інколи потрібно закінчити цикл достроково. Для цього в точці виходу із циклу достатньо помістити оператор Exit For. Наприклад:
Private Sub Search_Click()
txtR.Text = “Відповідність не знайдена.”
For I = 1 To 30
iloc = InStr (1, NameArray(I), findstr, 1)
If iloc > 0 Then
txtR.Text = NameArray(I)
Exit For
End If
Next I
End Sub
Даний код використовується для пошуку в масиві деякого імені. Якщо це ім’я незнайдене, немає необхідності продовжувати пошук в останніх елементах масиву. Тому для виходу із циклу використовується оператор Exit For.
Цикли DO
Головне в умовних циклах, звичайно, умова. Умова являє собою будь-який вираз, як повертає значення True або False.
Оператори Do While
Ключове слово While в операторі Do While вказує програмі на те, що цикл продовжується весь час поки умовний вираз рівний True. Коли умова стає рівна False, програма переходить на оператор, який слідує за оператором циклу.
Існує два види циклів Do While. Різниця визначається положенням умови: вона може поміститися або на початку, або в кінці.
Розміщення умови While на початок оператора Do, ви повідомляєте програмі, що хочете перевірити умову перед виконанням будь-яких операторів, розміщених в циклі. Якщо умова рівна True, оператори які повторяються між Do і Loop виконуються. Потім програма повертається до оператора Do і повторює перевірку умови. Як тільки умова стане рівним False, програма переходить до оператора, який слідує за Loop.
Обидва оператора Do і Loop є обов’язковими.
В циклі такого типу оператори, розміщені всередині циклу, можуть взагалі не виконуватися. Якщо при вході в цикл умова рівна False, програма зразу ж перейде на кінець циклу.
Для того щоб виконати цикл Do While хоча би раз, застосовується другий варіант оператора Do While. В цьому випадку умова розміщена в операторі Loop, і програма виконує цикл хоча би раз, після цього перевіряється умова і визначається, чи продовжувати цикл.
Оператори Do Until
Цикли Do Until, в принципі, схожі на цикли Do While, за винятком того, що оператори в циклі Do Until виконуються весь час, поки умова рівна False. Коли умова стає рівна True, цикл закінчується. Цикл Do Until має два види: з умовою розміщеною в операторі Do, і з умовою, розміщеною в операторі Loop. Якщо умова знаходиться в операторі Do, вона перевіряється перед тим, як виконаються команди циклу. Якщо умова переміщається в оператор Loop, перед перевіркою умови цикл виконається хоча б раз.
Дуже часто Do Until використовується при читані і обробці даних із файлу. Цикл починається з першого запису файлу, і кожний запис обробляється до тих пір, поки не зустріне кінець файлу.
Масиви
До цього моменту ви повинні були вже пристосуватися до концепцій змінних, які дозволяють вам зберігати значення під час виконання програми.
В практичній роботі досить часто приходиться мати справи з набором однорідних змінних. Наприклад, ви захочете підрахувати кількість вазонів у школі, знаючи кількість вазонів у кожному класі. Замість того щоб працювати з одинадцятьма змінними, набагато зручніше мати масив із одинадцять елементів. Наприклад:
Dim Blumen(11) As Integer
Dim Summa As Integer
For I=1 to 11
S=S+Blumen(I)
Next I
Label1.Caption = “Кількість вазонів у школі: ”+S
Багатовимірні масиви
Масиви можуть мати розмірність більшу від одиниці. Наприклад, ви зможете зберігати кількість вазонів, якщо у школі є по два паралельних класи. Наприклад:
Dim Blumen(11, 2) As Integer
Blumen(1,1) = 14
Blumen(1,2) = 17
Blumen(2,1) = 11
1.6. Використання процедур і функцій. Робота з декількома формами
• Повторення використання коду в різних частинах прикладної програми
Дуже часто в різних частинах програми виконується одні і ті ж дії. Програму легше супроводжувати, якщо код для виконання однакових функцій знаходиться в одному місці. Для створення хорошої програми недостатньо просто написати код.
По-перше, необхідно мати можливість для створення фрагменту коду який використовується повторно і програмних елементів для того, щоб не писати їх кожний раз заново. По-друге, потрібно ефективно керувати цими фрагментами програми.
Використання процедур і функцій
Кожний, хто знайомий з створенням різної техніки, наприклад, автомобіля, знає, що машина не збирається в одному місці. Замість цього збираються і тестуються різні блоки машини, а потім виконується кінцева зборка машини. Такий принцип дозволяє підвищити ефективність технічного процесу в цілому.
Багато років розробники програм використовують ті ж принципи модульного конструювання, що і машинобудування. Різні частини програми пишуться у вигляді модулів, які називаються процедурами і функціями. Ці фрагменти програми програмного коду призначенні для виконання деякої конкретної задачі. Коли виникає необхідність такої задачі, процедура викликається з другої частини програми.
Щоб відрізнити процедури користувача від процедур для обробки подій, перші називаються Sub-процедурами.
Причини використання процедур
Використання процедур і функцій дає деяку перевагу порівняно з написанням коду у вигляді єдиного модуля. Наприклад:
• Кожну задачу можна тестувати індивідуально. Невеликі розміри процедур полегшує її налагодження.
• Можна позбутися від надлишкового коду і не повторувати програмний код, а кожний раз, коли потрібно виконати конкретну задачу, викликати процедуру.
Створення процедур і функцій
Перший крок при створенні процедури або функції – визначення задачі, яка буде виконуватися цією процедурою. Оскільки процедура являє собою мініатюрну програму, цей процес нагадує проектування програми в цілому. Потрібно визначити, яку задачу буде виконувати дана процедура, яка інформація буде в неї передаватися і яку інформацію процедура буде повертати.
Після того, як "проект" процедури готовий, можна починати процес її створення. При цьому можна піти двома шляхами: використовувати оператор Sub або діалогове вікно Add Procedure (Добавити процедуру).
Ручне написання коду процедури
Для того щоб створити процедуру, використовуючи оператор Sub, потрібно війти у вікно редагування коду Visual Basic. В цьому вікні потрібно вибрати область (General) (Загальні) в списку об’єктів Object і область (Declarations) (Оголошення) у списку процедур Proc. При цьому курсор буде розміщений в області, яка не належить жодній процедурі.
Нова процедура починається ключовим словом Sub і назвою процедури; вони вводяться в тому рядку де знаходиться курсор. Правила назви процедури співпадають з правилами, для назви змінної. Коли будуть введені слово Sub і назва процедури, відбудеться наступне (після натискання кнопки <Enter>): в кінці оператора Sub розміститься пара дужок. В кодовому вікні появиться оператор End Sub, і ім’я процедури з’явиться як поточний об’єкт в списку Proc кодового вікна. Це показано на мал.1.33. для процедури Proba.
Мал.1.33. Вікно коду.
Тепер можна вводити будь-які команди, які процедура повинна виконати при її виклику.
Використання вікна Add Procedure
Інший спосіб створення процедур – вибрати команду Add Procedure з меню Tools. При цьому з’явиться діалогове вікно Add Procedure(мал. 1.34), в якому потрібно виконати наступні дії:
Мал. 1.34. Діалогове вікно Add Procedure.
1. Ввести ім’я процедури
2. Вибрати тип процедури (Sub, Function, Property або Event).
3. Вказати, чи буде процедура об’явлена як Public або Private.
4. Вказати, чи повинні локальні змінні бути об’явленні як Static.
Для більшості процедур можна вибрати тип процедури Sub. Це аналогічно процедурам, які використовуються в програмах для обробки подій. Функція – це процедура, яка повертає деяке значення. Процедура властивості (Property) – це процедура, яка використовується для встановлення або отримання деякої властивості у формі. Процедура обробки події (Event) застосовується при створенні події в деякій формі.
Після того як необхідна інформація введена, можна натиснути кнопку Ok в діалоговому вікні. Visual Basic створить робочу область для процедури у вікні коду.
Виконання процедури
Розробка процедури – це тільки перший етап в процесі її використання. Для того щоб процедура виконувала свою задачу, вона повинна запускатися, або викликатися, з іншої частини програми. Для цього існує два способи: можна просто вказати ім’я процедури, а можна використовувати оператор Call. В будь-якому випадку достатньо вказати ім’я процедури і всі необхідні їй параметри. (Параметри задаються в операторі Sub при описанні процедури.)
Створення функції
Функція, як і процедура, створюється за допомогою вікна Procedure, або з допомогою оператора Function. Як і процедура, функція може бути описана як Public або Private і може зберігатися у формі. Синтаксис функції практично повністю співпадає із синтаксем процедури. Нижче показано приклад функції для обрахунку максимуму двох чисел.
Public Function Max(inptnum1, inptnum2)
If inptnum1>inptnum2 Then
Max = inptnum1
Else
Max = inptnum2
End If
End Function
Можна побачити, оголошення функції – перший рядок – дуже схожий на оголошення процедури. Головна відмінність від процедури в тому, що функція повертає значення. Це значення присвоюється імені функції в одному з її операторів. Хоча процеси створення процедури і функції дуже схожі, виклик функції значно відрізняється від виклику процедури. Функція звичайно не створює окремий оператор, а її значення присвоюється змінній або використовується в операторах іншого типу. Для прикладу, описана проста функція і показано два випадки її використання в операторах.
'****************
'Описання функції
'****************
Public Function VarAverage(varang1, varang2)
VarAverage = (varang1 + varang2) / 2
End Function
'***********************************
'Виклик функції із оператора присвоєння
'***********************************
newAvg = VarAverage(25, 15)
'********************************
'Виклик функції із оператора ділення
'********************************
If VarAverage(num1, num2) >25 Then
NumSum = num1 + num2
End If
Визначення області дії процедур і функцій
При створенні процедури можна обмежити сферу її використання. Обмеження стосуються того, де процедура зберігається, або наявності ключових слів Public, Private або Static в описі процедури. Частина програми, де процедуру можна використовувати, називається областю дії процедури.
Процедури можна описувати як Public або як Private. То, яке із цих ключових слів використовується в операторі Sub, визначає, чи зможуть інші процедури або програми звертатися до даної процедури.
Тип Public
Якщо потрібно, щоб процедура або функція була доступна в межах всієї програми, при їх описі потрібно використовувати ключове слово Public. В цьому випадку процедуру, описану в одній формі, можна буде викликати із інших процедур. За допомогою процедур Public потрібно буди обережним з їх іменами, оскільки кожна глобальна змінна повинна мати унікальне ім’я. Якщо в операторі Sub немає ключового слова Public і Private, процедура по замовчуванню як загально допустима, тобто Public.
Тип Private
Якщо в операторі Sub використовується ключове слово Private, до процедури можна звернутися тільки з тої форми, де вона описана. В цьому є свої плюси. Позитивний момент – те, що в різних модулях можна мати процедуру Private з однаковими іменами. Негативний момент полягає в тому, що до даної процедури не можна звертатися з інших модулів.
Збереження значення змінних (Static)
Звичайно при роботі процедури змінні які в ній використовуються спочатку створюються, потім використовуються і знищуються при виході з процедури. Інколи, необхідно зберегти значення змінної для подальших викликів процедури. Для цього слугує ключове слово Static. Це слово можна використовувати в оголошені змінних процедури або в оголошені самої процедури.
Коли слово Static застосовується в оголошені змінних, зберігається значення тільки тих змінних, які використовуються в операторі Static. Якщо слово Static зустрічається в оголошені процедури, зберігаються всі змінні цієї процедури.
Робота з декількома формами
Хоч деякі програми можуть бути достатньо простими і мати одну форму, більшість програм складаються з багатьох форм. Одна з причин цього – нестача місця в межах одної форми. Інша, більш важлива причина, полягає в тому, що розробник хоче використовувати в програмі різні форми для логічно самостійних задач.
Добавлення до програми і відображення нових форм
Коли Visual Basic завантажує новий проект, звичайно є одна пуста форма. В процесі проектування програми до цієї форми добавляються елементи керування і пишеться код для обробки подій, які виникають в цій формі.
В деякий момент в процесі проектування виникає необхідність в новій формі для виконання нової задачі або переносу лишніх елементів з початкової форми. Зробити це неважко. Потрібно вибрати Add Form з меню Project. При цьому на екрані з’явиться нова пуста форма, така як перша. Якщо перша форма зберегла ім’я по замовчуванню, Form1, то нова форма отримає ім’я Form2 (Form3, Form4 і т.д.). Після створення нової форми в ній можна розміщувати елементи керування і писати код для її подій – так, як це було для початкової форми. Завантаження і відображення форм розглядалося в параграфі 1.2., пункт "Відображення форми"
II. Програма вивчення Visual Basic в школі.
Розділ 1. Вступ у Visual Basic 3 год.
1. Опис інтерфейсу користувача Visual Vasic 1 год.
2. Отримання довідкової інформації 1 год.
3. Самостійна робота №1 1 год.
Розділ 2. Використання форм і елементів керування 5 год.
1. Знайомство з властивостями, методами і подіями 1 год.
2. Використання елементів керування 2 год.
3. Функціональні можливості елементів керування 1 год.
4. Самостійна робота №2 1 год.
Розділ 3. Основні відомості про моделі програмування, які керуються подіями. 5 год.
1. Програмування і події 1 год.
2. Зміна парадигми програми 1 год.
3. Обробка подій 1 год.
4. Послідовність подій 1 год.
5. Самостійна робота №3 1 год.
Розділ 4. Використання меню і діалогових вікон 4 год.
1. Керування програмою за допомогою діалогових вікон 1 год.
2. Вивід інформації для користувача 1 год.
3. Отримання інформації від користувача 1 год.
4. Самостійна робота №4 1 год.
Розділ 5. Програмування на Visual Basic 6 год.
1. Робота із змінними 1 год.
2. Написання простих операторів 1 год.
3. Розгалуження програми 1 год.
4. Використання циклів 1 год.
6. Самостійна робота №5 1 год.
Розділ 6. Використання процедур і функцій. Робота з декількома формами 3 год.
1. Використання процедур і функцій 1 год.
2. Робота з декількома формами 1 год.
3. Самостійна робота №6 1 год.
Розділ 6. Випускна задача 5 год.
1. Складання алгоритму і оформлення випускної задачі 1 год.
2. Створення проекту і написання коду випускної задачі 3 год.
3. Складання заліку 1 год.
ІІІ. Оформлення та звіт випускної задачі.
3.1. Оформлення випускної задачі
Випускна задача складається з чотирьох вікон, причому повинен бути зв’язок між ними, тобто, гіперпосилання:
1. Титульний лист.
2. Інструкція.
3. Форма робочої програми.
4. Заключний кадр.
Титульний лист
На титульному листі повинно бути (мал. 3.1):
1. Повна адреса школи (установи) де виконувалася випускна задача.
2. Назва випускної задачі.
3. Клас, прізвище та ім’я виконавця випускної задачі.
4. Прізвище, ім’я та побатькові керівника випускної задачі.
5. Місто (село) та рік виконання випускної задачі.
Мал. 3.1. Загальний вигляд титульного листа робочої програми.
Інструкція.
Цей кадр (мал. 3.2.) містить чітке і змістовне викладення правил користування програмою.
Мал. 3.2. Загальний вигляд титульного листа робочої програми
Робоча програма
Цей кадр (мал. 4.3) містить робочу програму.
Мал. 3.3. Робоча програма.
Заключний кадр
Цей кадр (мал. 3.4.) повинен містити малюнок. Тут кожен учень зможе проявити свою фантазію і уміння малювати або може використати готовий малюнок.
Мал. 3.4. Заключний кадр.
3.2. Звіт випускної задачі
Після того, як учень виконав випускну задачу на комп’ютері він повинен здати звіт, оформляючи його на листках формату А4. Звіт складається з таких основних пунктів:
1. Титульний лист.
2. Завдання (умова задачі).
3. Алгоритм програми.
4. Текст програми і основна форма.
5. Заключний кадр.
Титульний лист
На титульному листі повинно бути:
1. Повна адреса школи (установи) де виконувалася випускна задача.
2. Назва випускної задачі.
3. Клас, прізвище та ім’я виконавця випускної задачі.
4. Прізвище, ім’я та по-батькові керівника випускної задачі.
6. Місто (село) та рік виконання випускної задачі.
Завдання (умова задачі)
В цьому пункті, формулюється умова задачі і в разі необхідності малюється малюнок.
Алгоритм програми
Даний пункт містить детальний опис алгоритму розв’язування задачі.
Текст програми і основна форма
В цьому пункті міститься текст програми і основна форма.
Заключний кадр
В цьому пункті міститься малюнок із заключного кадру випускної роботи.
IV. Спеціальне запитання.
Задача розміщення
Припустимо, що є одна дорога і n населених пунктів вздовж неї. Розмірами населених пунктів можна знехтувати, зображаючи їх крапками; між населеними пунктами дано відстань (по дорозі). Ми хочемо розмістити в цій лінійній країні школу. Найти для неї оптимальне місце.
Спершу потрібно домовитися, що розуміти під оптимальним розміщенням. Очевидно, потрібно знати, скільки учнів живе в кожному пункті. Нехай такі дані відомі: pi, i=1, 2, …, n, – число учнів в і-му пункті. Припустимо, що є тільки два пункти: селище, де живе тисяча учнів і окремий хутір, де живе один учень. Очевидно, будувати школу біля хутора буде невірно, потрібно мінімізувати суму, так сказати, учнів-кілометрів, які проходять, наприклад, зранку, тобто по дорозі в школу.
Вернемося до задачі з n пунктами. Уявимо собі, що будівельник майбутньої школи рухається з пункту 1 в пункт n і до будівельника прив’язані резинки: а штук до спини і b – до грудей. Тут а – число учнів, які осталися за спиною, а b – які живуть попереду, а + b = s. Після того, як будівельник покине перший пункт, p1 резинок буде тягнути його назад а s–p1 – вперед; якщо p1<s–p1, то рівнодійна буде тягнути вперед. Іншими словами, після кожного кроку будівельника, p1 учням прийдеться робити на один крок більше, але s–p1 учням – на один крок менше.
Постає запитання, де потрібно подувати школу в населеному пункті, або між населеними пунктами. Припустимо, що точка зупинки будівельника сталася на дорозі між двома сусідніми пунктами з числом учнів с і d, відповідно. Позаду точки зупинки живе а учнів, a=+c, а попереду b учнів, b=d+; a=b. Нехай будівельник зробив крок назад. Внаслідок цього а учням прийдеться робити на крок менше, а b – на крок більше, але так як a=b, то кількість учнів-кілометрів не зміниться. Внаслідок цього, будівельник може зробити ще крок назад і т.д., поки він не зайде в попереднє місто. Тут будівельника назад тягнуть резинок, с резинок розслаблені, а b тягнуть вперед. Оскільки b>, будівельник піде вперед, але тоді +с=а резинок почнуть тягнути назад і оскільки a=b, будівельник зупиниться. Таким чином, по описаних правилах руху, будівельних не зможе вийти з пункту на дорогу.
Тепер введемо більш реальну задачу. Наш світ стане двохвимірним, і пункти будуть з’єднані нормальною дорожньою сіткою (але, населені пункти і перехрестя доріг будуть в рівній мірі рахуватися вершинами сітки).
З доказаного вище, легко вивести наступне твердження: В двохмірній задачі школу потрібно розміщувати у вершині дорожньої сітки.
І так, в двохвимірній задачі ми повинні вибрати місце для школи.
Приклад. Дано сітку, зображену на малюнку. Число учнів у вершинах і=1, …, 7 задано числами s=(80, 100, 140, 90, 60, 50, 40).
Розв’язання. Перш за все, нам потрібно ввести дані. Дані про кількість учнів введемо у масив S, а дані про відстані у масив D. Масив відстаней D задає довжини доріг між вершинами, якщо такої дороги немає, то присвоюється велике число Б, рівне “машинній нескінченності”
80
100 140 90 60 50 40
0 9 10 Б 11 Б Б
9 0 5 6 5 Б Б
10
5 0 7 Б Б 14
Б 6 7 0 8 4 11
11 5 Б 8 0 6 Б
Б Б Б 4 6 0 13
Б Б 14 11 Б 13 0
Користуючись алгоритмом Флойда-Уршела, найдемо найкоротші відстані з кожної вершини в кожну.
Алгоритм Флойда-Уоршелла
Цей алгоритм настільки простий, що він зрозумілий навіть на машинній мові програмування
For k = 1 To n
For i = 1 To n
For j = 1 To n
If d(i, j)>d(i, k)+d(k, j) Then d(i, j)=d(i, k)+d(k, j)
Таким чином, користуючись операцією трикутника (d(i, j)=min(d(i, j); d(i, k)+d(k, j)))
Ця операція замінює d(i, j) на d(i, k)+d(k, j), якщо так коротше.
Отримається результат, записаний в наступній матриці.
0 9 10 15 11 17 24
9 0 5 6 5 10 17
10 5 0 7 10 11 14
15 6 7 0 8 4 11
11 5 10 8 0 6 19
17 10 11 4 6 0 13
24 17 14 11 19 13 0
Якщо поставити школу у вершині 1, то загальна кількість учнів-кілометрів рівна сумі добутку елементів першого рядка матриці на відповідні числа масиву S.
Перебір по всіх вершинах дає наступні числові дані.
f1 f2 f3 f4 f5 f6 f7
6120 3440 3640 3800 4560 4930 8360
Таким чином, школу потрібно ставити у вершині 2.
Тепер, коли по сутності все ясно, не завадить і розв’язати задачу формально:
Дана сітка N з n вершинами, яким поставлена вага p1, p2, …, pn. Найти точку u на сітці, таку що:
,
де diu є відстань від і-ої вершини до точки u.
Алгоритм задачі розміщення
1. Вводимо початкові дані, тобто відстань між вершинами dij і вагу кожної вершини pi.
2. За допомогою алгоритму Флойда-Уоршелла знаходимо найкоротшу відстань від кожної вершини до кожної.
3. Знаходимо вагу-відстань для кожної вершини і вибираємо найменшу.
4. Виводимо результат.
Висновок.
Пізнавальний інтерес в учня тим вищий, чим повніше відношення учня до вивчення предмету. Якщо вчителю вдається викликати інтерес до свого предмету, то створюються передумови для самостійності творчої діяльності учнів. Якщо інтерес відсутній, то інформація не сприймається учнями, тому важливо розвивати інтерес до предмету, зокрема, до інформатики і цим самим активізувати навчально-пізнавальний процес.
З допомогою Visual Basic можна створити практично будь-яку програму: ігри, текстові редактори, бази даних і навіть програми для Interned. І хоч в деяких конкретних випадках надається перевага іншим мовам програмування, Visual Basic – один з найбільш гнучких і простих у використані.
Саме застосування Visual Basic у шкільному процесі спонукає дітей до творчості винахідливості. При виконані завдань перед учнями потрібно ставити мету, а в виконані самої роботи на Visual Basic потрібно давати їм можливість імпровізувати, адже головне у навчання є досягнення поставленої мети.
Завдання що ставилося перед дипломною роботою (
Література.
Додатки.
Проект гри “Хрестики-нулики”
Код програми для проекту “Хрестики-нулики”
Form1
Private Sub Command1_Click()
Unload Me
End
End Sub
Private Sub Command2_Click()
Unload Me
Load Form2
Form2.Show
End Sub
Private Sub Form_Load()
Form1.Top = 1000
Form1.Left = 2300
End Sub
Form2
Private Sub Command1_Click()
Unload Me
Load Form1
Form1.Show
End Sub
Private Sub Command2_Click()
Unload Me
Load Form3
Form3.Show
End Sub
Private Sub Form_Load()
Form2.Top = 1000
Form2.Left = 2300
End Sub
Form3
Private PosFree As Integer
Private EndOfGame As Boolean
Private Field(2, 2) As Integer
Const Emp = 0
Const Cross = 1
Const Zero = 2
Private MyPic
Private YourPic
Private Sub Command1_Click()
Unload Me
Load Form2
Form2.Show
End Sub
Private Sub Command2_Click()
Unload Me
Load Form4
Form4.Show
End Sub
Private Sub Command3_Click()
IniField
MakeStep
End Sub
Private Sub Form_Load()
Form3.Top = 1000
Form3.Left = 2300
MyPic = Zero: YourPic = Cross
IniField
MakeStep
End Sub
Private Sub picField_Click(Index As Integer)
Dim i, j As Integer
If Not EndOfGame Then
If picField(Index).Picture = picSam(Emp).Picture Then
picField(Index).Picture = picSam(YourPic).Picture
i = Index \ 3: j = Index Mod 3
Field(i, j) = YourPic
PosFree = PosFree - 1
TestEnd
If Not EndOfGame Then MakeStep: TestEnd
End If
End If
End Sub
Private Sub IniField()
Dim i, j As Integer
PosFree = 9: EndOfGame = False
For i = 0 To 2
For j = 0 To 2
Field(i, j) = Emp
picField(i * 3 + j).Picture = picSam(Emp).Picture
Next j
Next i
End Sub
Private Sub MakeStep()
Dim i, j, n As Integer
n = Int(Rnd() * PosFree) + 1
For i = 0 To 2
For j = 0 To 2
If Field(i, j) = Emp Then n = n - 1
If n = 0 Then Exit For
Next j
If n = 0 Then Exit For
Next i
Field(i, j) = MyPic
picField(i * 3 + j).Picture = picSam(MyPic).Picture
PosFree = PosFree - 1
End Sub
Private Sub TestEnd()
Dim res, i As Integer, s As String
res = -1
For i = 0 To 2
If Field(i, 0) <> Emp Then
If Field(i, 0) = Field(i, 1) And Field(i, 0) = Field(i, 2) Then res = Field(i, 0): Exit For
End If
Next i
For i = 0 To 2
If Field(0, i) <> Emp Then
If Field(0, i) = Field(1, i) And Field(0, i) = Field(2, i) Then res = Field(0, i): Exit For
End If
Next i
If Field(0, 0) <> Emp Then
If Field(0, 0) = Field(1, 1) And Field(0, 0) = Field(2, 2) Then res = Field(0, 0)
End If
If Field(2, 0) <> Emp Then
If Field(2, 0) = Field(1, 1) And Field(2, 0) = Field(2, 2) Then res = Field(2, 0)
End If
If res < 0 And PosFree = 0 Then res = Emp
EndOfGame = res >= 0
If EndOfGame Then
If res = Emp Then
s = "Нічия!"
ElseIf res = YourPic Then
s = "Вітаю! Ви виграли."
ElseIf res = MyPic Then
s = "Нажаль, але ви програли."
End If
i = MsgBox(s, vbOKOnly, "Кінець гри")
End If
End Sub
Form4
Private Sub Command1_Click()
Unload Me
Load Form3
Form3.Show
End Sub
Private Sub Command2_Click()
Unload Me
Load Form1
Form1.Show
End Sub
Private Sub Command3_Click()
Unload Me
End
End Sub
Private Sub Form_Load()
Form4.Top = 1000
Form4.Left = 2300
End Sub
Звіт до випускної задачі.
Хмельницька область
Теофіпольський район
Гаврилівська загальноосвітня школа І-ІІІ ступенів
Гра “Хрестики-нулики”
Випускна задача
Виконавець
Учень 11 класу
Прокопчук А.І. Керівник
Вчитель інформатики
Пилипчук О.П.
с. Гаврилівка, 2000
Завдання
Скласти на Visual Basic програму-гру “Хрестики-нулики” для поля 3х3. Проект програми повинен складатися з таких кадрів (форм):
1. Титульний лист.
2. Інструкція.
3. Гра “Хрестики-нулики”.
4. Заключний.
Алгоритм програми
1. Створення форми.
Форма складається командної кнопки “Старт” – початок гри, з 9 керуючих елементів PictureBox під назвою picField, а також 3 невидимих елементів PictureBox для пустої картинки, картинок хрестика і нулика picSam.
2. Опис змінних і констант.
Змінна PosFree цілого типу – число вільних клітинок, EndOfGame логічного типу – ознака закінчення гри, масив Field(2, 2) – матриця заповнення поля (3х3).
Константи Emp = 0 – пусте поле, Cross = 1 – хрестик, Zero = 2 – нулик.
3. Ініціалізація.
В процедурі IniField (ініціалізація для нової гри), змінній PosFree присвоюємо значення 9 (всі клітинки вільні), EndOfGame – значення False і в двох вкладених циклах від 0 до 2 заповнюємо масив Field нулями, а відповідні елементи PictureBox пустою картинкою.
4. Хід комп’ютера.
В процедурі MakeStep (хід комп’ютера) вибираємо випадкове число n в межах від 1 до числа вільних клітинок. Шукаємо n по порядку вільну клітинку і заповнюємо її “нуликом” а відповідному елементу масиву Field присвоюємо значення 2. Також зменшуємо число вільних клітинок PosFree на 1 і звертаємося до процедури TestEnd.
Хід гравця.
Після того, як гравець клацнув лівою кнопкою “миші” по елементу ігрового поля, перевіряється чи є цей елемент вільний. Якщо цей елемент вільний, заповнюємо його “хрестиком”, а відповідному елементу масиву Field присвоюємо значення 1. Також зменшуємо число вільних клітинок PosFree на 1, звертаємося до процедури TestEnd і даємо зробити хід комп’ютеру.
4. Перевірка закінчення гри.
В процедурі TestEnd перевіряється чи закінчилася гра, чи ні. Це здійснюється шляхом перевірки чи є в масиві рядок, стовпець або діагональ заповненні однаковими елементами. В залежності від того якими елементами заповнено (1 або 2) робиться висновок, про те хто виграв. Якщо в масиві не має вільного місця, тобто PosFree=0 і жодний рядок, чи стовпець, чи будь-яка діагональ не заповнені однаковими елементами – нічия.
Текст програми і основна форма
Private PosFree As Integer
Private EndOfGame As Boolean
Private Field(2, 2) As Integer
Const Emp = 0
Const Cross = 1
Const Zero = 2
Private MyPic
Private YourPic
Private Sub Command3_Click()
IniField
MakeStep
End Sub
Private Sub Form_Load()
MyPic = Zero: YourPic = Cross
IniField
MakeStep
End Sub
Private Sub picField_Click(Index As Integer)
Dim i, j As Integer
If Not EndOfGame Then
If picField(Index).Picture = picSam(Emp).Picture Then
picField(Index).Picture = picSam(YourPic).Picture
i = Index \ 3: j = Index Mod 3
Field(i, j) = YourPic
PosFree = PosFree - 1
TestEnd
If Not EndOfGame Then MakeStep: TestEnd
End If
End If
End Sub
Private Sub IniField()
Dim i, j As Integer
PosFree = 9: EndOfGame = False
For i = 0 To 2
For j = 0 To 2
Field(i, j) = Emp
picField(i * 3 + j).Picture = picSam(Emp).Picture
Next j
Next i
End Sub
Private Sub MakeStep()
Dim i, j, n As Integer
n = Int(Rnd() * PosFree) + 1
For i = 0 To 2
For j = 0 To 2
If Field(i, j) = Emp Then n = n - 1
If n = 0 Then Exit For
Next j
If n = 0 Then Exit For
Next i
Field(i, j) = MyPic
picField(i * 3 + j).Picture = picSam(MyPic).Picture
PosFree = PosFree - 1
End Sub
Private Sub TestEnd()
Dim res, i As Integer, s As String
res = -1
For i = 0 To 2
If Field(i, 0) <> Emp Then
If Field(i, 0) = Field(i, 1) And Field(i, 0) = Field(i, 2) Then res = Field(i, 0): Exit For
End If
Next i
For i = 0 To 2
If Field(0, i) <> Emp Then
If Field(0, i) = Field(1, i) And Field(0, i) = Field(2, i) Then res = Field(0, i): Exit For
End If
Next i
If Field(0, 0) <> Emp Then
If Field(0, 0) = Field(1, 1) And Field(0, 0) = Field(2, 2) Then res = Field(0, 0)
End If
If Field(2, 0) <> Emp Then
If Field(2, 0) = Field(1, 1) And Field(2, 0) = Field(2, 2) Then res = Field(2, 0)
End If
If res < 0 And PosFree = 0 Then res = Emp
EndOfGame = res >= 0
If EndOfGame Then
If res = Emp Then
s = "Нічия!"
ElseIf res = YourPic Then
s = "Вітаю! Ви виграли."
ElseIf res = MyPic Then
s = "Нажаль, але ви програли."
End If
i = MsgBox(s, vbOKOnly, "Кінець гри")
End If
End Sub
Заключний кадр.