Разработка программ на Visual Basic
Как создать программу на
Visual Basic? Как и любую другую на каком угодно
языке.
1. Постановка
задачи.
Продумать, что должна
делать программа, какие данные для неё потребуются, как эти данные в программу
попадут, как они будут обрабатываться и в каком виде выводиться.
2. Проектирование интерфейса.
Означает помещение на форму нужных управляющих элементов, меток, кнопок,
изображений и т.п. Этот этап создает внешний вид программы.
3. Составление программного кода.
Означает реализацию поставленной задачи при помощи языка программирования.
Фактически, обеспечение связанного взаимодействия всех элементов интерфейса:
кнопок, меток и т.д.
4. Отладка
программы.
Этот этап часто может занимать
всего больше времени. В действительности означает тщательную проверку работы
программы во всех предусмотренных (и непредусмотренных) ситуациях. Требует
возврата к третьему и даже зачастую ко второму этапу для обеспечения работы
программы, так, как это задумывалось в первом.
Итак, рассмотрим создание простых программ на языке
программирования Visual Basic (VB).
Предложенные программы прошли обкатку в средах
программирования VB5 и
VB6. Для их использования в средах VB2005
и выше требуются минимальные переделки типа:
свойство будет называться не Caption, а
Text. (Фирма Microsoft так
быстро клепает несовместимые программные среды, что за ней очень сложно
угнаться, тем более в обучении программированию.)
Общие пояснения
Сравни картинки
Цифровые часы
Угадайка
Ахил и черепаха
Совершенные числа
Выбери любимый цвет
Проверь реакцию
Выбор файла
Общие вопросы создания программы на Visual Basic
В начало
Визуальное проектирование. Размещение элементов управления на форме |
Изменение и установка свойств элементов управления. |
Ввод программного кода. |
Первый элемент управления | Свойство 1 = ?, Свойство 2 = ? | Команды, которые выполняющиеся, как реакция на определенное событие для данного элемента управления |
Второй элемент управления |
... |
|
... | ... | ... |
CommandButton |
Caption = Выход из программы |
End |
В процессе обучения большинство программ пишется для
экспериментальных целей. Это означает, что во время эксперимента уясняется
работа какой либо функции, программной конструкции или проверяется возможность и
особенности вывода той или иной информации. Но программирование в конечном
смысле это не самоцель, а инструмент для использования во благо человека.
При отдаче приоритета этапу
постановки задачи, нужно признаться, что
все остальные тоже имеют свое значение.
Ненадлежащая оценка важности каждого наносит серьезный ущерб программе.
Неудобный, запутанный,
непонятный интерфейс это огромный минус программы.
Очень часто отказываются от программы из-за того, что с ней неудобно работать,
пусть даже она выполняет полезные вещи.
Создание
программного кода это отдельная песня. Серьезные авторитеты давно
ломают копья в попытке отнести его к творческому процессу или обыкновенному
применению инструмента - языка программирования. На мой взгляд, там где
инструмент можно применить тремя, пятью, двадцатью способами, что очень часто
встречается в программировании, значит это не
вульгарное кодирование,
а на самом деле что то другое. В конечном счете именно программный код решает
поставленную программе задачу, а значит, если он делает это быстро и
качественно, значит программист-кодировщик справился с поставленной перед ним
задачей.
Тот кто писал программы, знает, что,
на первый взгляд безупречный код, при его выполнении, то есть во время работы
программы, может начать выделывать странные вещи. Грубые ошибки выявляются еще
до запуска программы. Программисты шутят:
если при первой компиляции программы не выявилось ошибок, пусть системщик
проверит компилятор. Но
есть еще и логические ошибки, когда программа что то считает, и
что то выдает, но потом оказывается, что считала и выдавала она совсем не то.
Отладка программы
- серьезная вещь. Не зря фирмы платят за это деньги специальным
людям. Программист исходя из своего, как сейчас любят говорить менталитета,
никогда не сделает это так, как простой пользователь. Мой опыт программиста
невелик и то, программа, работающая не один год вдруг отказалась работать из за
того, что в последней строке файла данных забыли при вводе нажать Enter.
Итак разрешите представить на
ваш суд учебные программы на языке Visual Basic.
Исходя из вышесказанного, в каждом проекте
представлена
последовательность действий по созданию программного
продукта.
Чтобы
научиться программировать нужно писать программы. Вначале они могут быть самыми
простыми...
Это очень простая программа. Но, однако же, демонстрирует алгоритмическую структуру ветвление.
Для программы потребуется
две картинки,
которые ученики должны подготовить на уроке, на котором большая его
часть занята теорией. Картинки должны быть крупными.
Одна должна иметь четкие отличия от
другой, количество которых легко определить. Суть программы: игра из детства, которая заключается в определении количества различий на двух картинках. Программа предлагает их подсчитать и ввести. Если вы были внимательны и определили их правильно программа вас похвалит, а иначе предложить попытать счастья еще раз. Внимание: переменной (KolRaz), которая хранит число различий картинок, их количество присваивает хозяин программы. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Image 1 |
Stretch = True Picture = Первая из картинок |
|
Image 2 |
Stretch = True Picture = Вторая из картинок |
|
Command Button 1 | Caption = Сколько различий имеют картинки | KolRaz=3 N=Val(InputBox("Введите количество различий на картинках") If KolRaz=N Then MsgBox("Правильно!!!") Else MsgBox("Вы ошиблись!!!") End If |
Программа может быть усовершенствована:
- картинки можно брать настоящие и только лишь вносить
изменения
- можно использовать не одну пару, а несколько
- можно подсчитывать количество угаданных с первого раза.
Это совсем простая программа. Она демонстрирует использование невидимого элемента управления - таймера и системной переменной Time$.
Программа выводит цифровые часы на
фоне выбранного вами
изображения. Обратите внимание на размер и цвет цифр часов и изображения фона. Для лучшей читаемости цифры на фоне должны выглядеть контрастно. С точки зрения улучшения программы можно выполнить следующее. - Растянуть изображение на весь экран, включив свойство формы WindowState = Maximize. - Поместить на форму маленькую кнопочку для растягивания картинки на весь экран со следующим кодом Image1.Width = Form1.Width Image1.Height = Form1.Height (но можно это сделать и без кнопочки) - Заставить программу показывать часы в разных местах экрана, и выводить их по-другому, чтобы исключить моргание. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Image 1 |
Stretch = True Picture = Выбрать фоновое изображение |
|
Timer 1 | Interval = 1000 | Label1.Caption = TimeS |
Label 1 |
Font ? BackStyle = Transparant Caption = "" |
|
Command Button 1 | Caption=Max |
Image1.Width = Form1.Width Image1.Height = Form1.Height |
Form 1 (помещать не надо) | WindowState=Maximize |
Усовершенствованная
программа выглядит уже совсем по другому.
С хорошим фоном и с доделками не стыдно и на рабочий стол поставить.
Это простая программа, но требует проявить логическое мышление для угадывания числа за минимальное число шагов.
Компьютер загадывает число
от 0 до 100. Нужно угадать его, вводя числа. Компьютер после каждого ввода выдает подсказку о том: больше введенное число, чем загаданное или меньше. Возможные улучшения. - Убрать Rem из первой процедуры, чтобы подсмотреть число, загаданное компьютером; - доработать интерфейс (вид) программы; - выводить на форму введенное число или все введенные; - считать число попыток, за которые число будет угадано. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Label 1 | Caption = Угадай число Font ? | |
Label 2 |
Caption = "" Font ? |
|
Label 3 |
Caption = "" Font ? |
|
Command Button 1 | Caption = Загадать число | В левом
верхнем списке выбрать элемент General и объявить целочисленную
переменную A. Dim A As Integer Rem Дальше код самой процедуры Randomize (Timer) A = Int(Rnd * 100) Rem Label3.Caption = Str(A) |
Command Button 2 | Caption = Загадать число | B = Val(InputBox("Введи
число")) If A < B Then Label2.Caption = "Меньше" If A > B Then Label2.Caption = "Больше" If A = B Then MsgBox ("Молодец! Угадал!") |
Command Button 3 | Caption = Выход | End |
Ахилл и черепаха (из рубрики: Ох, уж эти греки) В начало
Это, дошедшая до нас из древности, простая арифметическая
задача об Ахилле и черепахе.
Ахилл увидел черепаху, которая находилась от него в 100 шагах, и решил ее
догнать. Ахилл движется в 10 раз быстрее черепахи. На каком расстоянии от начала
погони он ее настигнет, считая, что двигаются они по одной линии?
Философы древности утверждали, что никогда. Как бы близко он
к ней ни приближался, черепаха все равно будет уходить вперед.
Ну у древних греков компьютера не было, а мы в два счета это
расстояние определим.
Кстати, это одно из замечательных чисел. Чем оно замечательно? Посчитай и
увидишь!
Договоримся, что Ахил шел со
скоростью 1000 шагов в час. Будем измерять путь Ахила и черепахи каждую
секунду, и сравнивать пройденные ими пути.
Как только их пути сравняются, значит он ее догнал. Поле для эксперимента. - Проверьте работу программы на других скоростях; - Измените типы вычисляемых значений; - Попытайтесь определить почему результаты вычислений отличаются. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Label 1 | Caption = "Догнал ли Ахилл черепаху" Font ? | |
Label 2 |
Caption = "Скорость Ахила" Font ? |
|
Label 3 |
Caption = "Скорость черепахи" Font ? |
|
Label 4 | Caption = "Догнал на расстоянии" Font ? | |
Text1 | 1000 | |
Text2 | 100 | |
Text3 | Очистить поле | |
Command Button 1 | Caption = Найти расстояние | В левом
верхнем списке выберем элемент General и
объявим переменные.
Dim Sa As Single Dim Sch As Double Rem Дальше код самой процедуры Sa = 0 Sch = 100 While Sa < Sch Sch = Sch + Val(Text2.Text) / 3600 Sa = Sa + Val(Text1.Text) / 3600 Wend Text3.Text = Str(Sch) |
Command Button 2 | Caption = Выход | End |
Совершенные числа (из рубрики: Ох, уж эти греки) В начало
Программа предназначена для нахождения
совершенных чисел.
Совершенным называется число, которое равно сумме своих делителей, кроме самого
числа.
Греки знали четыре таких числа. Данная программа позволяет их найти.
Информация для эксперимента Замечательное свойство совершенных чисел, открытое, как полагают, учениками Пифагора гласит: если число р=1+2+4+...+2n - простое, то число 2n*p совершенное. Попробуйте написать программу нахождения совершенных чисел, используя это свойство. Известно, что пока не найдено нечетных совершенных чисел, поэтому проверку можно ускорить, исключив из поиска нечетные. На форме реализуйте показ числа, которое проверяется, так как, если вы будете искать пятое совершенное число: 33550336, которое нашли только в 15 веке, вам будет скучно смотреть на застывший экран. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму |
Измени его свойства | Двойной щелчок мыши: введи код. |
Label 1 |
Caption = Совершенные числа, Font? |
|
Label 2 | Caption
= Конечное значение = , Font ? |
|
TextBox1 |
Text =10000 Font ? |
|
TextBox2 |
Text Очистить MultiLine = True ScrollBars = Vertical Font ? |
|
Command Button 1 |
Caption = Найти, Font ? |
Rem Начать поиск с числа I = 3 Rem Цикл с условием, пока I < заданного для поиска While I < Val(Text1.Text) Rem Начальное значение суммы делителей Sum = 0 Rem Цикл нахождения суммы делителей For K = 1 To I - 1 Rem Нахождение остатка от деления, если он равен нулю, то делитель найден Ost = I Mod K If Ost = 0 Then Sum = Sum + K Next K Rem Если число равно сумме делителей то оно совершенное If I = Sum Then Text2.Text = Text2.Text & Str(Sum) & vbCrLf Rem Обновить отображение в текстовом поле Text2.Refresh End If Rem Задать следующее число для проверки I = I + 1 Rem Конец цикла поиска чисел Wend |
Command Button 2 | Caption = Выход | End |
Хотя это очень простая программа, но она демонстрирует использование в программе стандартного диалога WINDOWS. В программах очень часто используются эти диалоговые панели. В данном случае мы выберем цвет, который нам нравится. Программа выводит число, которое кодирует данный цвет.
При выборе цвета можно
использовать таблицу с основными цветами или воспользоваться полной
палитрой. Кусочек кода, который демонстрирует выбор цвета можно
использовать для выбора цвета кисти рисования, замены фона и так далее. Поле для экспериментов. - Разложить число, которое является суммой трех составляющих: красного, зеленого и синего и найти соответствующую интенсивность каждого; - Найти какой нибудь психологический тест по цветовым пристрастиям (например Люшера) и, взяв оттуда информацию, выдать выбирающему цвет его психологический портрет. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Label 1 | Caption = Мой любимый цвет, Font ? | |
Label 2 | Caption = Твой цвет - это число, Font ? | |
Sape | ||
TextBox | Text - Очистить | |
Command Button | Caption = Выбор цвета | cdMyDialog.ShowColor Form1.Shape1.FillColor = cdMyDialog.Color Text1.Text = cdMyDialog.Color |
Это
уже не очень простая программа. В ней мы используем невидимый элемент
управления - Timer.
Элемент управления - геометрическая фигура. И, не пугайтесь,
функцию аппаратно программного интерфейса
(API) GetTickCount. Функция после своего вызова
возвращает значение равное количеству миллисекунд прошедших с момента запуска
операционной системы. Обращаясь к ней, мы довольно точно
можем вычислять временные промежутки.
Лирическое
отступление. Пренебрежительное
отношение к Visual Basic заканчивается, как только
программист начинает использовать в своих программах всю мощь функций
API операционной системы. Я согласен, что полноценную
динамичную игрушку на VB написать сложно. Вам все
равно придется обращаться к DirectX или
OpenGL. Из VB это делать
нерационально. Все остальные программы
можно смело писать в среде VB,
если вы на ТЫ с API.
Смотрите, как это совершенно запросто делает элементарная программа.
После запуска программа
показывает вам черный круг и предлагает нажать кнопку старта.
Данная
кнопка задает случайную выдержку
времени истечение которой, просигнализирует красным цветом индикатора.
После
превращения индикатора
из черного
в красный
начинается
отсчет времени,
а вы должны как можно
быстрее
нажать на кнопку
Стоп.
Отсчет времени прекращается и вы видите время своей реакции на сигнал. Возможные улучшения. - Поле для экспериментов с этой программой просто безгранично. Вы можете построить график измерений вашей реакции. - Можете выводить кнопку Стоп в разных местах. Заставить испытуемого нажимать несколько кнопок, и т.д. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести элемент на форму | Измени его свойства | Двойной щелчок мыши: введи код. |
Form1 (Еее не надо помещать она уже есть) |
Private Sub Form_Load() Rem Верхнюю и нижнюю строки VB вставит сам Form1.Shape1.FillColor = &H0 End Sub |
|
Label 1 | Caption = Проверь свою реакцию, Font ? | |
Sape | Shape1.Shape= Овал | |
Timer | a = GetTickCount Shape1.FillColor = &HFF Timer1.Enabled = False |
|
Command Button 1 | Caption = Старт | В левом
верхнем списке выберите элемент General и
объявите функцию API .
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long И переменные Dim a As Long, b As Long Rem А ниже код реакции на нажатие кнопки Randomize (Timer) Timer1.Interval = Rnd * 3000 Timer1.Enabled = True |
Command Button 2 | Caption = Стоп | b = GetTickCount MsgBox Str$((b - a) / 1000) + " секунды.", , "Время реакции" Shape1.FillColor = &H0 |
Command Button 3 | Caption = Выход | End |
Выбор требуемого файла или папки встречается во многих программах. Создадим программу демонстрирующую, как это можно делать. В дальнейшем данную заготовку можно использовать в своих программах при открытии, сохранении файла или в других подобных ситуациях.
Программа позволяет выбрать диск, нужную папку и файл. В одном из окон отображается путь к файлу в другом полное имя вместе с маршрутом к нему. Имеется окно ввода маски поиска файлов, в котором можно указать маску с использованием обобщающих символов. Поиск будет производиться с ее использованием. |
Согласно методике описанной на исходной странице, весь процесс создания программы состоит из 3х этапов. Не выполнив предыдущий, не приступайте к следующему.
Помести на форму |
Измени или установи свойства | Двойной щелчок введи код. |
DriveListBox | Размер окна показа | Перед процедурой выбора диска объявите переменную:
Dim MyPath as String Rem Дальше код самой процедуры Dir1.Path = Drive1.Drive |
TextBox | Text - Очистить | |
TextBox | Text - Очистить | |
DirListBox | Размер окна показа | Text1.Text = Dir1.Path File1.Path = Dir1.Path File1.Pattern = Text3.Text MyPath = File1.Path |
FileListBox | Размер окна показа | If Right(MyPath, 1) <> "\" Then MyPath =
MyPath & "\" Text2.Text = MyPath & File1.FileName |
Label | Caption - Выбран файл по Маске : | |
TextBox | Text = *.* | |
CommandButton | Caption = Выход | End |
Дополнение: Увеличив размер формы и поместив на нее элемент управления Image, можно превратить модуль выбора файла в программу просмотра изображений.
Для элемента
управления Image1 установите свойство
Stretch = True, а к коду
FileListBox добавьте строчку: If UCase(Right(Text2.Text, 3)) = "JPG" Then Image1.Picture = LoadPicture(Text2.Text) Строчка проверяет расширение файла и если это файл изображения загружает его для просмотра. Программа может также просматривать файлы BMP и GIF. Выполните доработку самостоятельно. |
В процессе создания даже таких простых проектов 3 стадии создания программ на VB прочно закладываются в память.