Встроенные функции
Особое значение имеют строковые функции, т.к. в полях ввода информация хранится в текстовом формате или в формате ariant. Использование же неявных преобразований типов из Variant часто приводит к проблемам и является более медленным.
Строковые функции:
= Space (число пробелов) - выдает строку, состоящую из одних пробелов, причем число символов в строке определяется параметром в скобках.
= String (число, строковое выражение $) - формирует строку, содержащую одинаковые символы.
Например, X$=String (10, “z”) - 10z
= Len (строковое выражение) - длина текущей строки с проблемами и напечатанными символами.
= Mid (строка, начало [, длина])
Mid (“Visual Basic”, 1,6) = “Visual”
Mid (“Visual Basic”, 8,6) = “Basic”
Mid (“Visual Basic”, 8) = “Basic”
Пример. Подсчет числа точек в строке
Points % = 0
Length % = Len (Text $)
For I% = 1 to Length %
If Mid (Text $, I%, 1) = “.” then
Points $ = Points $ + 1
End If
Next I%
= Left (cтрока, № до позиции)
= Right (строка, с № позиции)
Функцию Mid можно использовать для изменения содержания внутри текущей строки. Например
X $ = “Best Basic”
Mid (X $,1,5) = “Quick”какое количество символов
с какого символа будет взято из новой строки
вставляется новая
строка поверх части старой
= Insert ([начальная позиция], строка для поиска, подстрока)
является ли данная строка частью другой строки, выдает номер позиции, с которой начинается подстрока.
Text $ = “QuickBasic”
X $ = Instr (1, Text $, “Basic”)=6.
Если подстрока не найдена Instr возвращает нулевое значение (False).
Пример.
If Instr (Text $, “?”) then
Print “символ найден”
Else
Print “Не найден”
End If
= LСase, = UСase - преобразует все символы строки в нижний (верхний) регистр
Вместо Lcase $ Ucase$
= Str lomp - для сравнения строк
Пусть X = StrComp (A$, B$) =
Если A$ или B$ пуста, то х=NULL
Если использовать StrComp (A$,B$,1) - регистр не учитывается, а если StrComp (A$,B$,0) - регистр учитывается.
= Trim (строка $) - уничтожает пробелы начале и конце строки
LTrim (строка $) - уничтожает пробелы в левой части строки
RTrim(строка $) - уничтожает пробелы в правой части
Все строковые функции, за исключением Mid, не изменяют строку, а создают ее копию и потом с ней работают.
Управляющие структуры в программе
Определенные циклы
For ___ Next
For I% = 1 to 10 (% - целочисленный тип для ускорения работы цикла)
Print I%
Next I%
Цикл завершается, не в тот момент, когда значение счетчика равняется конечному, а когда оно превышает его.
Пример. Печать всеми доступными шрифтами экрана.
Private Sub Form_Click()
Dim I As Integer
For I=0 to Screen.FontCount - 1
FontName = Screen.Fonts (I)
Print “Это шрифт”; Screen.Fonts (I)
Next I
End Sub
Неопределенные циклы
Не выполняются фиксированное число раз. Цикл может выполняться или нет в зависимости от результата, вычисляемого внутри цикла
Do
Выражение
Loop Until выполняется условие
Пример. Проверка пароля
Private Sub Form_Load ()
Do
X$ = InputBox$ (“Пароль ?”)
Loop Until X$ = “VB”
End Sub
Для остановки бесконечного процесса используют клавиши “Break” или Run|End или закрыть приложение. В программе можно использовать оператор Exit Do (или Exit For), которые переводят программу к оператору следующему после цикла.
Сложные неопределенные циклы
В неопределенных циклах проверка происходит в конце цикла и счетчика увеличивается еще на 1. Иногда это вызывает лишнее обновление счетчика. Можно передвинуть проверку условия на начало цикла:
Do Until условие
Тело цикла Выражение
Loop
Do While
Do
Loop Until аналогичен
Do
Loop While условие
Пример.
Do Do
Loop Until N>5 ? Loop While N <=5
Do While
Do
Выражение
Loop While условие
или
Do While условие
Выражение
Loop
В таких циклах можно объединять несколько условий, например
Do While X<=0 and txtDisplay.Text=“ “
?
?
Loop
Цикл While /Wend
While условие
. . . . .
Wend
Например, While x>0
S = S+x
Wend
Может быть несколько вложенных циклов. Любой Wend относится к ближайшему While. Do __ Loop дает структуру и гибкость цикла.
Условные операторы
If условие Then оператор
Например, If N>=0 and N<=9 Then Print “Ok”
Оператор Select Case
Позволяет обрабатывать несколько вариантов выбора.
Select Case переменная или выражение
Case оператор проверки условия
действие 1
.
.
.
Case . . . . . .
действие n-1
End Select
Пример:
Select Case Ball
Case Is < 13 позволяет проверить значение переменной
Grade = 2
Case Is < 18
Grade = 3
Case Is < 22
Grade = 4
Case Else
Grade = 5
End Select
Пример 1. If ThenElse
Private Sub Form_QueryUnload(Cansel As Integer, UnloadMode As Integer)
X % = MgBox(“Вы уверены?”, VbYesNo)
If X % = VbNo Then
Cancel = True
Else
Cancel = False
End IF
End Sub
Пример 2.
If optColor1.Value Then
Color$ = “Красный”
Else If optColor2.Value Then
Color$ = “Зеленый”
Else If optColor3.Value Then
Color$ = “Синий”
Else
Color$ = “Белый”
End If
Пример:
Select Case Den
Case 1
Print “Пн”
Case 2
Print “Вт”
.
.
.
Case 7
Print “Вс”
End Select
В фразе Case можно задавать значения переменной в виде диапазона
Select Case Den
Case 1 to 5
Print “Рабочий день”
Case Else
Print “Выходной”
End Select
либо перечислением возможных значений
Select Case Den
Case 6,7
Print “Выходной”
Case Else
Print “Рабочий день”
End Select
Массивы
2 вида массивы: управляющие и массивы переменных (обычные массивы или списки).
Управляющие массивы состоят из нескольких однотипных элементов управления, использующих общие свойства, по отличающимся порядковым номерам или индексам. Может быть не более 255 элементов в таком массиве. При этом новые элементы на форме помещаются на место исходных элементов управляющего массива. Поэтому при размещении на форме их следует позиционировать и двигать, чтобы они не перекрывали друг друга. Например, можно создать на форме матрицу надписей или текстовых полей.
Одномерные массивы или списки определяются именем и положением элемента в списке. Например данные о выпуске продукции за 12 месяцев.
Могут быть фиксированные и динамические списки. Размеры их могут быть велики и определяются объемом свободной памяти.
У фиксированных списков размер не меняется, а динамические списки могут менять свой размер. Для фиксированных списков память выделяется в начале работы программы и существует меньший риск переполнения памяти.
Динамические списки более гибки в работе.
Списки могут быть видимыми всему приложению, данной форме (модулю) или только одной процедуре.
Создание фиксированного списка:
а) в форме (модуле). Описание помещается в разделе деклараций формы (модуля)
Dim Massiv$(20)
доступен любой процедуре модуля или формы;
б) в пределах всего проекта (глобальный)
Public Massiv(20) As String - 21 элемент от 0 до 20
или Global
в) локальный массив, который сохраняется до следующего вызова процедуры
Private Sub ...........
Static Massiv A(20)
Создание динамических массивов.
а) в форме
В размере декларации формы Dim DYNMAS() As String
А внутри процедуры выделяем нужный размер
Private Sub ...........
Dim N %
ReDim DYNMAS(N) As String
При работе команды ReDim информация в массиве теряется.
Для сохранения информации при изменении размера массива
ReDim Preserve DYNMAS(N+1) As String
или (N-1) удалит последний элемент
б) Глобальный динамический список, видимого в пределах всего проекта
Public DYNMAS() As String
или Global
Далее можно использовать ReDIM в любой процедуре всего проекта.
Ввести данные в массив можно с помощью INPUT BOX, текстового поля.
Для изменения нумерации в массиве не с 0, а с 1 - оператор Option Base 1 в разделе деклараций формы (модуля).
Можно задавать массив диапазоном значений
вместоDim A(19)
Dim A (1980 TO 2000)
Освобождение ОП от динамический массивов Erase DYNMAS/ Для фиксированных списков Erase только очищает массив.
Окна ввода
Окна ввода- это другая возможность, помимо текстовых полей, для ввода информации. Функция InputBox$ выводит на экран модальную диалоговую панель, которая в отличие от текстовых полей имеет фиксированный размер окна. У окна ввода есто строка заголовка и 4 элемента: подсказка, командные кнопки OK и Cancel и поле ввода. Синтаксис функции: Строковая переменная=
InputBox(“подсказка”[,заголовок][поумолчанию][,X][,Y][,файл справки, контекст])
где подсказка- текстовая строка или строковая переменная (1024 символа),
заголовок -содержание строки заголовка окна,
по умолчанию - начальное содержимое окна ввода,
X,Y- расстояние между левым (верхним) краями экрана и окна ввода. Если параметры не заданы, то окно располагается по центру на 1/3 высоты экрана.
Например, MyInput$=InputBox(“Введи число”, “Запрос”,”0”,100,200)
Вывод информации
Для вывода информации непосредственно на форме используется метод Print. Его синтаксис:
Имя формы.Print выражение
Например: frmHello.Print “Привет !”
VB5 выводит информацию, начиная с того места, которое определяют свойства CurrentX и CurrentY- горизонтальная и вертикальная позиции. При использовании метода Cls для очистки содержимого формы CurrentX и CurrentY=0 и метод Print выводит информацию, начиная с левого верхнего угла.
Вывод информации можно осуществлять различными шрифтами, в зависимости от используемого оборудования и программного обеспечения. Если операционная система не находит данный шрифт, она выбирает ближайший аналог. Для выбора шрифта в программном коде используется следующий оператор присваивания:
ИмяОбъекта-контейнера.Font.свойство=значение
?Например, frmHello.Font.Name=“Arial”
frmHello.Font.Size =20
frmHello.Font.Bold=True и т.д.
В качнстве объекта- контейнера могут быть командная кнопка, форма, надпись, поле ввода. Но только формы и графические окна могут работать одновременно с несколькими шрифтами. В остальных элементах управления изменение шрифта влияет на весь текст.
Печать табличных данных
В VB5 печать текста можно осуществлять в заданном формате. Зона имеет размер в 14 символов. В основном зоны используются при печати непропорциональными шрифтами типа Courier, т.к. каждая колонка по ширине равна среднему значению ширины символа. Если параметры в методе Print разделены запятыми, то данные выводятся в нескольких зонах. Например: