Основы Visual Basic 5.0

В приложениях VB 5.0 исполняемые строки
должны размещаться внутри процедур либо функций. Операторы в VB редко используют
номера строк, а любые из них обычно начинаются с новой строки. Строки ограничены
длиной в 1023 символа. можно расширять строки, используя символ "_" после
пробела в конце строки. Несколько операторов можно объединять в одной строке,
разделяя их " : ". Комментарии задаются верхней кавычкой ('), либо оператором
REM. Комментарий может быть выведен отдельной строкой, либо в конце строки. Во
втором случае лучше использовать кавычку ('), чем REM, т.к. REM здесь требует
разделителя (:). Например, DIM FARENG : REM переменная для вычисления
t Оператор End - программа останавливается. После
оператора End закрываются все окна, открытые программой, а сама она стирается из
памяти. Внутри приложения VB может быть сколько угодно операторов End, но обычно
лучше использовать только один оператор End в процедуре обработки событий
QueryUnload для основной формы. В этом случае все операторы End заменяются на
Unload Me, который вызывает себе QueryUnload для формы. Например, Можно использовать оператор LET У
любого объекта VB есть свойство по умолчанию. Например, для текстового поля это
свойство Text. При ссылке на данное свойство можно не указывать его
имя. Некоторые свойства могут принимать
значения TRUE или FALSE. В VB5 имеются встроенные константы для обозначения
данных свойств, например, cmdExit=False будет скрывать командную кнопку, пока не
появится выражение cmdExit=True. Можно использовать
следующее выражение для изменения свойства на противоположное Переменные. Имена переменных менее 255 символов
начинаются с буквы, за которой следуют другие буквы, цифры или символ "_".
Регистр значения не имеет. В качестве имен переменных нельзя использовать
зарезервированные слова, например, Print. Принято использовать смешанный регистр
при задании имен переменных, состоящих из нескольких слов, например,
CurrentValue. String - строковые
переменные. Для обозначения этого типа можно добавить символ "$" к концу
имени. ? Например, IntVar% =5 SinglePrecision
хранит дробные числа с точностью до 7 цифр. Для на чисел может достигать 38
знаков с обозначением "!". Вычисления ч данными переменными будет
приблизительным. DoublePrecision "#". Числа с точностью до 16 цифр и длиной до
300 символов. Вычисления тоже приблизительны, а скорость небольшая. Используется
для научных расчетов. Currency - используется при преобразовании десятичных
чисел в двоичную форму и наоборот. Обозначение - "@". Может иметь до 14 цифр до
запятой и до 4 цифр - после. Используется для финансовых расчетов. Date -
значения даты и времени от 00 час.1 января.100 года до 00час.31 декабря.9999 г.
Значение обозначается "#". Byte - для хранения целых
чисел от 0 до 255. Экономит оперативную память и размеры массивов. Используется
также при работе с двоичными файлами. Variant - данные любого типа. Если VB не
знает тип принимаемых данных, используется этот тип. Использование его замедляет
работу программ, т.к. требует времени и ресурсы для операций преобразования
типов. В отличие от других версий Basic в одной программе нельзя использовать
одни и те же имена переменных, отличающихся только типом. Например, A% и
А! При первом использовании переменной VB временно присваивает переменной тип
Variant и пустое значение. Это значение исчезает в тот момент, когда переменной
присваивается реальное. Любой тип данных имеет свое "пустое" значение. Для
String это строка нулевой длины " ". Для численных переменных это 0. Можно не
использовать идентификаторы для обозначения типа переменной, а использовать
оператор Dim. Оператор Dim служит для объявления типов переменных. Dim Years As Integer, Amount As Currency Если в программе используются
необъявленные переменные, легко допустить ошибку при написании их имени. В этом
случае используется принудительное объявление переменных с помощью оператора
Option Explicit. Этот оператор не используется в конкретных процедурах обработки
событий, а размещается в разделе General формы, чтобы быть доступным всем
процедурам обработки событий. После того, как VB встречает оператор Option
Explicit, он не позволяет более использовать необъявленные переменные. Этот
оператор можно использовать для изменения значений по умолчанию. В программах VB5 все переменные изолированы внутри
процедур. То есть переменная Result в одной процедуре не влияет на значение
переменной с тем же именем в другой процедуре. То есть переменные являются
локальными по отношению к процедурам, если не указано иначе. Иногда
необходимо, чтобы какая-то переменная была доступнавсем процедурам формы. Такие
переменные называют переменными уровня формы или модуля. Переменные уровня формы
также объявляются в разделе General с помощью операторов Private или Dim. В
больших проектах, в которых процедуры и формы хранятся в отдельных модулях, а не
подключаются к форме, можно объявить глобальную переменную, доступную в любой
части проекта. Когда VB
вызывает процедуру обработки события, старые значения локальных переменных
уничтожаются. Они принимают значения по умолчанию. Такие переменные называются
динамическими. Но в некоторых случаях необходимы статические переменные, которые
не инициализируются повторно при вызове процедуры. Часто такие переменные
используются для счетчиков, их используют, чтобы сделать элементы управления
видимыми или невидимыми. Чтобы объявить статическую переменную внутри процедуры
необходим оператор Dim заменить на Static. Если необходимо, чтобы все переменные в процедуре были
статическими, необходимо добавить Например, A$ = "Иванов" Отличие. С помощью "&" можно
объединять строковые и другие типы. Например, C = A% & B$, изменится их тип
на Variant. Для перехода к новой строке при печати символов (перевод каретки)
используется встроенная const VbCrLf. Например, чтобы разорвать строку в
информационной панели или в многостроковом текстовом поле можно Замечание. Если в программе используются числа и они не присваиваются
переменной Variant, то VB полагает: Если не имеет десятичной
точки и лежит в диапазоне для Long Integer, то это Long Int. Если имеет
десятичную точку и лежит в диапазоне для чисел с обычной точностью (7 цифр), то
это Single precision. Такие приблизительные расчеты часто приводят к
проблемам. Например, VB полагает, что тип результата с двумя целыми числами есть
целое. Например результат Print 123456 789
выходит за рамки целого и возникает ошибка переполнения. Тогда необходимо
использовать идентификатор хотя бы для одной переменной Print 123456& Можно также использовать встроенные функции для
преобразования типов, например, LInt - округляет число до целого, Clong - до
длинного целого, Cvar - преобразует к Var. Помимо
обычных, десятичных чисел, VB использует двоичные и шестнадцатеричные. Последние
обозначаются с префиксом &H. Например, число 49 =
&H31. Шестнадцатиричные цифры используются для кодирования различных
цветов: любой цветовой код состоит из 6 шестнадцатиричных цифр от
&H000000& = 0 до &HFFFFFF& (длинное целое) (16777215). Вообще
конкретный цвет определяется количеством красного R, зеленого G и синего цветов
B во всевозможных сочетаниях. В коде цвета VB две последние цифры означают
количество красного, две средние - количество зеленого, а две первые -
количество синего, например &HFF0000& -
максимально синий &H808080& -
серый (равные количества цветов) Для неизменных значений в
программе используются константы. Константы объявляются аналогично переменным,
по тем же правилам: имя содержит не более 200 символов, первый символ буква.
Если в программе используется только одна форма, то константу можно объявить в
разделе DeclarationHous для объекта General. Или же можно и непосредственно в
процедуре, но это хуже. Константу объявляют через зарезервированные слова Const.
Например, VB5 имеет только
набор встроенных констант, например, VbCrLf или VbOrOnly. Их можно вставлять в
текст программы из окна Object Browser (F2 или меню View). Чтобы вставить Const
в программе: Перейти в программе на место вставки и
нажать Ctrl+V. Особое значение имеют строковые функции,
т.к. в полях ввода информация хранится в текстовом формате или в формате ariant.
Использование же неявных преобразований типов из Variant часто приводит к
проблемам и является более медленным. = Space (число
пробелов) - выдает строку, состоящую из одних пробелов, причем число символов в
строке определяется параметром в скобках. Например, X$=String (10,
"z") - 10z = Mid (строка, начало [, длина]) Пример. Подсчет числа точек в строке Points $ = Points $ + 1 Функцию Mid можно использовать для
изменения содержания внутри текущей строки. Например с какого символа будет взято
из новой строки является ли данная строка
частью другой строки, выдает номер позиции, с которой начинается
подстрока. Если
подстрока не найдена Instr возвращает нулевое значение (False). Print "Не найден" = Str lomp -
для сравнения строк Если использовать StrComp (A$,B$,1) - регистр не учитывается,
а если StrComp (A$,B$,0) - регистр учитывается. LTrim (строка $) - уничтожает пробелы в левой
части строки Все
строковые функции, за исключением Mid, не изменяют строку, а создают ее копию и
потом с ней работают. For I% = 1 to 10 (% - целочисленный тип для ускорения
работы цикла) Цикл завершается, не в тот момент, когда
значение счетчика равняется конечному, а когда оно превышает его. For I=0 to Screen.FontCount - 1 Не
выполняются фиксированное число раз. Цикл может выполняться или нет в
зависимости от результата, вычисляемого внутри цикла X$ = InputBox$ ("Пароль ?") Для
остановки бесконечного процесса используют клавиши "Break" или RunEnd или
закрыть приложение. В программе можно использовать оператор Exit Do (или Exit
For), которые переводят программу к оператору следующему после цикла. В неопределенных циклах проверка происходит в конце цикла
и счетчика увеличивается еще на 1. Иногда это вызывает лишнее обновление
счетчика. Можно передвинуть проверку условия на начало цикла: Loop While условие Выражение В таких циклах можно объединять несколько условий,
например Loop Может быть несколько вложенных циклов. Любой Wend относится к
ближайшему While. Do __ Loop дает структуру и гибкость цикла. Оператор Select Case Case оператор проверки
условия Case Is < 13 позволяет проверить
значение переменной Пример 1. If Then
Else If X % = VbNo Then Color$ = "Красный" Color$ =
"Белый" End Select Print "Рабочий день" Print
"Выходной" 2 вида
массивы: управляющие и массивы переменных (обычные массивы или
списки). Управляющие массивы состоят из нескольких однотипных элементов
управления, использующих общие свойства, по отличающимся порядковым номерам или
индексам. Может быть не более 255 элементов в таком массиве. При этом новые
элементы на форме помещаются на место исходных элементов управляющего массива.
Поэтому при размещении на форме их следует позиционировать и двигать, чтобы они
не перекрывали друг друга. Например, можно создать на форме матрицу надписей или
текстовых полей. Одномерные массивы или списки определяются именем и
положением элемента в списке. Например данные о выпуске продукции за 12
месяцев. Могут быть фиксированные и динамические списки. Размеры их могут быть
велики и определяются объемом свободной памяти. У фиксированных списков размер
не меняется, а динамические списки могут менять свой размер. Для фиксированных
списков память выделяется в начале работы программы и существует меньший риск
переполнения памяти. Списки могут
быть видимыми всему приложению, данной форме (модулю) или только одной
процедуре. Dim Massiv$(20) Public Massiv(20) As String - 21 элемент от 0 до 20 Static Massiv A(20) А внутри процедуры выделяем нужный размер При работе команды ReDim
информация в массиве теряется. или (N-1) удалит последний
элемент Далее можно использовать
ReDIM в любой процедуре всего проекта. Для изменения нумерации в массиве не с 0, а с 1 -
оператор Option Base 1 в разделе деклараций формы (модуля). Освобождение ОП от динамический массивов Erase DYNMAS/ Для фиксированных
списков Erase только очищает массив. Окна ввода- это другая
возможность, помимо текстовых полей, для ввода информации. Функция InputBox$
выводит на экран модальную диалоговую панель, которая в отличие от текстовых
полей имеет фиксированный размер окна. У окна ввода есто строка заголовка и 4
элемента: подсказка, командные кнопки OK и Cancel и поле ввода. Синтаксис
функции: Строковая
переменная= где подсказка- текстовая строка или строковая переменная
(1024 символа), X,Y- расстояние между левым (верхним) краями
экрана и окна ввода. Если параметры не заданы, то окно располагается по центру
на 1/3 высоты экрана. Для вывода информации непосредственно
на форме используется метод Print. Его синтаксис: VB5 выводит информацию,
начиная с того места, которое определяют свойства CurrentX и CurrentY-
горизонтальная и вертикальная позиции. При использовании метода Cls для очистки
содержимого формы CurrentX и CurrentY=0 и метод Print выводит информацию,
начиная с левого верхнего угла. Вывод информации можно осуществлять различными
шрифтами, в зависимости от используемого оборудования и программного
обеспечения. Если операционная система не находит данный шрифт, она выбирает
ближайший аналог. Для выбора шрифта в программном коде используется следующий
оператор присваивания: frmHello.Font.Bold=True и т.д. В качнстве объекта-
контейнера могут быть командная кнопка, форма, надпись, поле ввода. Но только
формы и графические окна могут работать одновременно с несколькими шрифтами. В
остальных элементах управления изменение шрифта влияет на весь текст. В VB5 печать текста можно осуществлять в заданном формате.
Зона имеет размер в 14 символов. В основном зоны используются при печати
непропорциональными шрифтами типа Courier, т.к. каждая колонка по ширине равна
среднему значению ширины символа. Если параметры в методе Print разделены
запятыми, то данные выводятся в нескольких зонах. Например: После обработки выражения методом Print, производится переход на
новую строку. Если используется Print без параметров, выводится пустая строка.
Если не нужно переходить на новую строку, в конце строки вставляется символ";".
Для печати с заданной колонки можно использовать функцию Tab, Например: Для вставки указанного числа пробелов, начиная с
текущей позиции, используется функция Spc (число пробелов %)
Format( числовое выражение, строка формата $) Me.Print Format(123.456789,"###.###") дают результат 123,46.
Незначащие нули в начале и конце числа игнорируются. Для вывода незначащих нулей
используется формат "000.00". Если необходимо вывести символы "- ", "+",
"$","(",")" или пробел, их размещают непосредственно в формате.
Например: Именованные форматы являются встроенными форматами VB5 и облегчают
работу по форматированию выводимого текста. Currency По крайней мере одна цифра слева и две справа от
десятичной точки Число в виде процента.
Выводит две цифры справа от дес.точки Если число
равно1, то выводит True, иначе False Если число равно1, то
выводит On , иначе Off Выводит дату и/или время. Если отсутствует
дробная часть, выводится только дата, если целая часть, то- время.Например
23.12.98 10:30:45 Полный формат Windows для вывода даты Wedn 23 Dec
1998 Обычный формат Windows для вывода даты 23- Dec-
98 Сокращенный формат Windows для вывода даты
23.12.98 Время в12-часовом
формате: час, мин и AM/PM Время в час, мин в 24-часовом
формате Me.Print Format(Now,
"General Date") Команда PrintForm выводит на принтер
графический образ окна формы. Ее синтаксис: ИмяФормы.PrintForm Команда
осуществляет побитовый перенос формы с заголовком и рамкой с экрана на форму и
не обладает достаточной гибкостью. Обычный способ вывода информации на принтер
состоит в использовании метода Print, связанного с объектом Printer. Метод Print
учитывает ориентацию страницы и может использовать свойства CurrentX и CurrentY
для точного позиционирования текста и точек на странице. Его
синтаксис: При этом сохраняются возможности метода
Print : ";" "," Tab, Spc, а также возможность управления свойствами
шрифта: А изменение
шрифта принтера не влияет на предыдущий текст. Свойство качество печати (если
это поддерживает драйвер принтера) 4-высокое
разрешение Текущие координаты текста доступные шрифты принтера кол. доступных шрифтов принтера 2-пункты Расстояние от левой границы ScaleHeight Методы
объекта Printer: Содержание Закончить работу с
документом. (Освобождение памяти и пересылка страниц в диспетчер
печати) определяет координатную систему пользователя Определяет высоту символа Пример. Форма содержит командную кнопку "Печать".
Программный код выводит на печать 2 страницы. На первой печатается "Стр.1". На
второй "Стр.2" . Printer.Print
"Стр."+Str(Printer.Page) Объект
Screen позволяет управлять размещением форм и выводом информации на
экране. Пример. Установить размер формы
равной 50% от размера экрана. Элементы
управления для работы с файлами Списки файлов
выводят по умолчанию имена файлов в текущем каталоге. Большинство свойств списка
файлов аналогичны обычному списку (размеры, расположение на форме, цвет, шрифт,
вертикальная линейка прокрутки). Аналогично списки файлов могут реагировать на
все события обычных списков. Однако для выбора файлов обычно используется не
одинарный, а двойной щелчок мыши DblClick. Содержание Фильтр, шаблон. Задает вид отображаемых в списке
файлов Например, имя выбранного файла можно
определить как filFile.List(ListIndex) или как свойство FileName. Вывести список
файлов в массив FileNames$( I%) можно с помощью следующего кода: Свойство
Pattern задает тип отображаемых файлов или шаблон * , ?. По умолчанию фильтр
установлен в значение *.* . Несколько фильтров отделяются друг от друга "; " .
Изменение свойства Pattern активизирует событие PatternChange. Свойство Path
устанавливает или возвращает текущий путь для списка файлов. Однако для
изменения текущего пути в операционной системе следует использовать команду
ChDir. Изменение свойства Path активизирует событие PathChange. Изменение
свойства FileName активизирует событие и PatternChange и PathChange. Изменение текущего пути для списка
файлов Изменение шаблона для отображения файлов в
списке Label1.Caption = "Path: " & Dir1.Path' Show path in
label. Label1.Caption = "Path: " & Dir1.Path'
Show path in label. File1.Path = Dir1.Path' Set File
path. Элемент управления
DirListBox - отображает дерево каталогов текущего диска. Содержимое списка
каталогов обновляется при двойном щелчке мыши. Подкаталоги текущего каталога
нумеруются от 0 до ListCount - 1. Сам текущий каталог имеет индекс -1,
родительский -2, выше -3 , ...При двойном щелчке мыши вызывается событие Change
и меняется значение свойства Path. Содержание Для доступа к свойствам,
событиям и методам родительской формы данного
элемента Изменение в списке
каталогов Для того. чтобы изменение в списке
каталогов отразилось списке файлов, можно использовать процедуру: При этом для списка
каталогов Path указывает выбранный каталог, а для списка файлов - каталог, файлы
которого отражаются в списке. В отличии от
предыдущих элементов список дисков является выпадающим. Список дисков отображает
текущий диск, а когда пользователь щелкает на кнопке со стрелкой, выводит список
всех доступных дисков. Содержание Для доступа к свойствам,
событиям и методам родительской формы данного
элемента KeyUp,KeyDawn,KeyPress Изменение в списке дисков Основным свойством является свойство Drive , которое используется для
получения и установки текущего диска. Это свойство используется для
синхронизации работы списка дисков и списка каталогов. Например, Ch Drive drvBox. Drive ' Если
нужно изменить текущий диск ОС б) информация в
файле обрабатывается от начала до конца Для совершения операции чтения или записи с файлом его нужно
открыть командой Open. После Open следует имя файла, строковая переменная или
строка в двойных кавычках. Если файл не текущем каталоге, нужно указать путь к
нему. # 1 -
это идентификатор файла - число от 1 до 255 с символом #. Максимальное число
одновременно открытых файлов определяются параметром в Config.sys. По команде
Open резервируется файловый буфер в памяти компьютера. По мере заполнения буфера
активируются соответствующий диск и весь блок информации посылается непрерывным
потоком на диск (количество будет устанавливаться в Config.sys). После окончания
работы с файлом он закрывается командой Close # идентификатор файла. Команда
Close сбрасывает информацию на диск и очищает буфер. Для сброса содержимого
буфера на диск (в критических ситуациях) используется команда Reset. Для ввода
информации в файл можно использовать команду Print # Close #1 Close без параметров закрывает все
файлы. Open "File 1" For Output As #1 Вместо Print можно использовать Write # идентификатор файла,
список переменных. Задается свободный идентификатор, который в данный момент
не используется в программе. Или так: После этого можно использовать оператор
Line Input # для построчного чтения информации из файла: Либо Input # идентификатор файла, список переменных, если запись
с помощью Write, txtDisplay Если файл сложной структуры, состоит из полей и
записей, то файл будет читаться целыми записями командой LineInput, либо можно
информацию читать из отдельных полей командой Input # Name As String Global StudentAdress( )
As StudentRecord Open "Spisok" For Input As #
FileNum Close FileNume Open "My.txt"
For Input As FileNum Дозапись информации в
существующий последовательный файл При этом строки, которые будут выведены в
файл присоединяются к строкам, которые уже содержаться в файле. Для этого служит
оператор -
VB открывает файл, а если он не существует, то создает и создает соответствующий
буфер; Пусть существует текстовый файл My.txt и нужно дописать в его конец
строку "До свидания": При обработке больших
файлов часто необходимо проверять на достижение конца файла. Для этого
существует оператор EOF (идентификатор файла). FileNum=FreeFile txtDisplay.Text=B$ Напоминают базу данных. Файл состоит из упорядоченных записей
одинакового размера. Существует запись, состоящая из полей, в которых
содержаться данные. Обеспечивает быстрый поиск информации, но дисковое
пространство используется неэффективно. Open
"MyLib.dat" For Random As # идентификатор файла Открытый файл прямого доступа может быть прочитан и записан
практически одновременно. Каждая запись в файле имеет номер записи. Это позволяет работать с
конкретной записью. При описании записи задаются пользовательским типом: Запись,
содержащую пятой записи файла в переменную: Print
#FileNum, 40, NewBook Созданные типы записей определяют размер файла прямого
доступа. Размер файла определяется функцией FileLen ("имя файла"). Размер записи
Len(NewBook) в байтах.