Реферат: Програмирование на Visual Basic
Пример программы.
Поместим рассмотренную функцию для определения среднего значения элементов одномерного массива в раздел general (Ьормы и обращение к ней в процедуру обработки события щелчка мыши по форме (рис. 3.19). После запуска программы и щелчка мыши по форме распечатывается среднее значение суммы элементов массива Х (рис. 3.20).
3.6.3. Передача аргументов по ссылке и по значению
Передача значений аргументов при вызове процедуры или функции по ссылке означает, что передается адрес памяти, по которому хранится значение аргумента (т.е. вызываемая процедура или функция для работы с переданным по ссылке аргументом использует одну и ту же ячейку или область памяти, что и вызывающая процедура пли функция). При этом не выделяется дополнительная намять для работы с переданным аргументом в вызываемой программе. Изменение значения аргумента в вызываемой процедуре или в функции означает изменение значения и в вызывающей процедуре или в функции (используется одна и та же ячейка или область памяти).
Передача цо ссылке определена по умолчанию. Передача значении аргументов при вызове процедуры или функции по значению (чтобы определить этот способ передачи, в списке аргументов процедур и функции для передаваемого таким образом аргумента используется ключевое слово ByVal) означает. что в вызываемом процедуре или функции выделяется для аргумента ячейка или область памяти, в которую записывается значение передаваемою аргумента.
Изменения значения аргумента в вызываемой процедуре или в функции не ведут к изменению аргумента в вызывающей процедуре или в функции (вызываемая процедура или функция использует для аргумента другую ячейку или область памяти аналогично локальным данным). Это удобно, если модификация данных необходима только внутри вызываемой процедуры или функции и нет необходимости передавать измененные данные обратно в вызывающую процедуру или функцию.
Вместе с тем передача по значению (выделение дополнительной памяти) приводит к неэффективному использованию памяти. В связи с этим, для строк символов и массивов нецелесообразно использовать передачу по значению.
3.6.4. Использование в качестве аргументов процедур и функции форм и элементов управления
Список аргументов процедур и функций может включать имена форм и элементов управления (в качестве описателей типа для них применяются соответственно Form и Control ). Это позволяет создавать универсальные алгоритмы для работы с формами и управляющими элементами. Например, для привлечения внимания пользователя к одной из управляющих кнопок формы можно создать одну универсальную процедуру, изменяющую шрифт и цвет фона,
Sub Att^ntio!-. ‘:3^;’. As Control;
Btn. i-‘onrl t.^ г.: ^ True
Bin.BackColor = Red
'костанта Red определена в файле CONSTANT.TXT End Sub
аргументом которой является имя кнопки. Обращение к данной процедуре с указанием в качестве значения имени какой-либо конкретной кнопки приведет к изменению ее шрифта и цвета (указывается имя кнопки Btn_Right)
Attention Btn_Riqht
Для контроля соответствия передаваемых при обращении типов форм и элементов управления в Visual Basic есть специальный оператор
If TypeOf имя объекта Is тип объекта Then
где TypeOf и Is — ключевые слова, а последующий синтаксис и действие совпадают с рассмотренным выше условным оператором.
Чтобы проверить соответствие передаваемого в процедуру объекта, в ее текст можно включить оператор
Sub Attention (Btn As Control)
If TypeOf Btn Is OptionButton Then
Btn.Fontltaiic = True
Btn.BackColor = Red
End If End Sub
Пример программы.
Создадим процедуру для изменения свойств формы, аргументом которой является имя формы, и процедуры обработки событий Click для задания исходных свойств формы и KeyPress, в которой имеется обращение к процедуре Change (рис. 3.21)
При запуске программы появляется исходная форма. Щелчок мыши по форме изменяет ее размер, положение и выводит начальную часть текста (задается в процедуре обработки события Click).
. Нажатие клавиши Enter приводит к изменению размера, положения формы и вывод заключительной части текста (обращение в процедуре обработки события KeyPress к процедуре Change) (рис. 3.22).
3.7 ФАЙЛОВЫЙ ВВОД-ВЫВОД
Архитектура современных компьютеров предусматривает наличие оперативной и внешней памяти. В оперативной памяти находятся выполняемая в данный момент программа и обрабатываемые ею данные. После выполнения программы ее данные в оперативной памяти не сохраняются, так как используемые ячейки памяти выделяются для данных другой программы. Технически и программно обусловленные ограниченность объема
оперативной памяти и ее относительно высокая стоимость не позволяют применять ее для постоянного хранения больших объемов информации. Для этого используется внешняя память (магнитные ленты, жесткие и гибкие магнитные диски, лазерные диски), позволяющие хранить сотни мегабайт (1 Мбайт = 1048576 байт) и гигабайт (1 Гбаит = 1.073.741.824 байт) информации и стоимость которых относительно невелика.
Хранение больших объемов информации на внешних носителях с учетом того, что время доступа к данным на внешних носителях на один, два порядка ниже времени доступа к данным в оперативной памяти, требует их хорошо продуманной организации. А возможность альтернативного хранения одних и тех же данных на различных внешних носителях требует использования единых принципов организации данных.
Таким универсальным понятием является файл (набор данных), который используется для работы с внешними данными на любом носителе. Под файлом понимается совокупность данных. Файл состоит из записей. Запись состоит из логически связанных данных, которые передаются между оперативной и внешней памятью за одну операцию ввода-вывода (ввод — передача данных из внешней в оперативную память, вывод - передача данных из оперативной во внешнюю память).
Например, в качестве файла можно рассматривать и используемую ранее колоду перфокарт. Одна карта является одной записью (устройство ввода перфокарт считывает последовательно по одной карте и нельзя считать меньше, чем одну карту). Запись характеризуется длиной (рассмотренная перфокарта является записью фиксированной длины в SO байтов и на ней можно было разместить 80 символов). Записи бывают фиксированной или переменной длины.
По способу доступа к записям файлы подразделяются на файлы последовательного и прямого доступа. При последовательном доступе для доступа к какой-либо записи должны быть пройдены все предыдущие записи, при прямом можно напрямую перейти к нужной записи. Все внешние устройства позволяют использовать последовательный доступ к записям файла. Прямой доступ позволяют использовать только устройства прямого доступа (например, магнитные и оптические диски).
В Visual Basic файлы подразделяются на:
- последовательные (sequential), записи которых могут быть переменной длины;
- прямого доступа (random access), записи которых могут быть только одинаковой длины;
- двоичные (Ьупагу) файлы с произвольной группировкой байтов, что позволяет организовать гибкий доступ к данным.
3.7.1. Последовательные файлы
Каждая запись последовательного файла представляет собой строку символов, в конце которой содержится символ <CR>, обозначающий переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающий переход на другую строку (line feed, ASCII-код равен 10). Последовательное действие этих двух символов обеспечивает переход к новой записи. После последней записи записывается признак конца файла (end of file), который может проверяться встроенной функцией EOF (возвращает значение True. если обнаружен конец файла, и False, в противном случае).
Для получения доступа к файлу для операции ввода-вывода используется оператор открытия файла, синтаксис которого следующий
Open имя_файла For Append Input As #номер_фаила fLen = размер буфера памяти}
где Open, For. Append. Input. Output, As — ключевые слова.
Input — файл открывается для ввода.
Output — файл открывается для вывода.
Append — устанавливает считывающе-записывающее устройство на конец файла и выводимая информация записывается в файл после существующих записей (при значении параметра Output выводимая информация записывается с начала файла, т.е. происходит перезапись файла, если в нем существовали записи).
Имя_файла — имя файла (символьная константа или переменная) или путь. Имя файла в DOS и Windows 3.1 состоит из не более чем восьми буквенных (латинских) или цифровых символов (первый символ буква), за которым может следовать расширение, определяющее тип файла (VBPART3.DOC, Project. MAC). В Windows 95 допускаются длинные имена файлов до 255 символов, включая специальные символы (в русской версии для записи имени файла можно использовать русские буквы) Путь определяет местонахождение файла в иерархической системе каталогов (C:\CONF1G.SYS, C:\WINDOWS\VB).
Номер файла — целочисленное выражение, значение которого должно лежать в диапазоне от 1 до 255 (присваиваемый файлу номер).
Len — определяет размер буфера операций ввода-вывода (по умолчанию 512 Кб).
Примеры:
Open “С:\CONFIC.SYS” For Input As tt5 'открывается
файл с именем CONFIG.SYS в директории С: для ввода
и ему присваивается номер 5
Doc$ = “a:\Utilits\NC.DOC”
присвоение значения константе
Open Doc$ For Input A.s ft 5
'открытие файла NC.DOC на диске А: в директории Utilits для ввода, файлу присваивается номер 2
Open “Resulc. t:-:t “ For Output As tt7
'открытие файла для вывода.
Если открывается для вывода несуществующий файл. то он создается при значениях параметров Append и Output. Если для ввода открывается несуществующий файл, то Visual Basic сообщает об ошибке. Если файл скрывается для вывода Visual Basic всегда создает новый файл, перезаписывая в него любой имеющийся на диске файл с тем же именем.
Существование файла перед открытием можно проверить с помощью встроенной функции Dir$ (возвращает строку с копией имени файла, если указанный файл существует, либо пустую строку в противном случае).
Пример.
If Dir$(“FilePrim.Txt”) <> “” Then
.Open “FilePrim.Txt” For Input As #12
End If
После завершения операций ввода — вывода файл должен быть закрыт. Для этого используется оператор
Close #номер_фачла где Close — ключевое слово;
номер_ файла соответствует номеру в операторе Open.
Для ввода информации из последовательного файла используется оператор
Line Input #номер_файла, имя_переменной где Line Input — ключевое слово;
номер_файла — номер файла, совпадающий с номером в операторе Open (вводится информация из открытого файла);
имя_переменной — имя переменной, которая принимает значение записи файла, типа String или Variant.
При выполнении оператора считывается одна запись файла и помещается в ячейку оперативной памяти, адрес которой соответствует имени переменной в операторе ввода (переменная получает значение, совпадающее с введенной записью файла). Последовательное выполнение операторов ввода обеспечивает последовательное считывание записей файла.
Встроенная функция EOF (аббревиатура английских слов End Of File - конец файла) позволяет проверять при чтении файла: достигнут конец файла или нет. Значением аргумента функции EOF является номер считываемого файла. Функция возвращает значение True, если достигнут конец файла, и False - в противном случае.
Пример.
Dim FileYura, Sr.rokaVvoda As String
'объявление символьных переменных
Open FileYura For Input As #5
'открытие файла FileYura для ввода Do While Not EOF(5)'цикл последовательного чтения
'записей файла пока не достигнут конец Line Input #5, StrokaVvoda'ввод считанной записи
'в переменную StrokaVvoda LineRead StrokaVvoda 'обращение к
'процедуре обработки строки LineRead 'аргументом которой является переменная StrokaVvoda Loop
Close #5 'закрытие файла
Для вывода информации в последовательный файл используется оператор
{Print* Write} ”номер_файла,[[Tab(n)]
[ выражение}[{,\;}}} где Print, Write — ключевые слова.
Print# — обеспечивает вывод в последовательный файл в формате дисплея (т.е. аналогично выводу на печать, например, на форме).
выражение - выражение, значение которого записывается в файл.
Если выражения разделяются “;”, то в файл они записываются без пробелов слитно.
Если выражения разделяются “,”, то в файл они записываются в фиксированные зоны длиной 14 символов (зонный формат).
Если в конце выражения не стоит “;” или “,”, то выведенная в файл строка дополняется символами <CR>, обозначающими переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающими переход на другую строку (line feed, ASCII-код равен 10). Т.о. каждому значению соответствует одна запись или одна строка при выводе в формате дисплея.
Spc(n) и ТаЬ(п) определяют соответственно вставку п пробелов между выводимыми выражениями и табуляцию на п колонок перед списком выражений.
Для удаления с дискового пространства неиспользуемого файла используется оператор
Kill имя_файла где Kill — ключевое слово.
В заключение следует отметить, что данные любого типа (Boolean, Data, Integer, Single, Double, Currency) записываются в файл в символьной форме. При выводе данные преобразуются к символьной форме, при вводе происходит их преобразование к первоначальному типу, па что затрачиваются ресурсы компьютера. Кроме того. представление данных в символьной форме неэффективно. Например, число 421596 типа Single -занимает в памяти компьютера 4 банта, но при записи в последовательны” файл - 7 байт: 1 байт па каждый символ.
Для того чтобы считать требуемую запись в последовательном файле необходимо последовательно пройти все предыдущие записи; чтобы изменить одну запись в файле, необходимо переписать весь файл заново. От этих недостатков свободны файлы прямого доступа.
Пример программы.
В первой части процедуры обработки события щелчка мыши по форме в файл TE5TFILE выводятся строки символов с использованием оператора Print# (вывод в формате дисплея). Во второй части процедуры записи этого файла читаются и выводятся в окно вывода в том виде, как они записаны в файле.
Текст процедуры:
Пример программы.
Программа осуществляет преобразование текстового файла последовательною доступа распаковкой его строк таким образом, чтобы каждая цепочка символов “*п”, где п — однозначное целое число (число пробелов), заменялась указанным числом пробелов.
Ввод исходных данных и управление работой программы осуществляется на форме на рис. 3.24.
На форме располагаются:
- командная кнопка “Ввод” (имя — Command 1), щелчок мыши по которой активизирует окно ввода (имя — Textl). Вводимая информация записывается в файл последовательного доступа:
- командная кнопка “Вывод” (имя — Commands), щелчок мыши по которой обеспечивает вывод записей файла в многострочном текстовом окне (имя Text2):
- командная кнопка “Преобразование” (имя — Command2), щелчок мыши по которой обеспечивает чтение записей файла, их преобразование в соответствии с заданием и запись новых записей в другой файл:
- командная кнопка “Вывод” (имя — Command4). щелчок мыши по которой обеспечивает вывод записей повою файла в многострочном текстовом окне (имя Textl);
- щелчок мыши по кнопке “Конец” прекращает выполнение программы.
Тексты процедур обработки событий:
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22