Использование в качестве аргументов процедур и функции форм и элементов управления 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование в качестве аргументов процедур и функции форм и элементов управления



Список аргументов процедур и функций может включать имена форм и элементов управления (в качестве описателей типа для них применяются соответственно Form и Control). Это позволяет создавать универсальные алгоритмы для работы с формами и управляющими элементами. Например, для привлечения внимания пользователя к одной из управляющих кнопок формы можно создать одну универсальную процедуру, изменяющую шрифт и цвет фона,

Для контроля соответствия передаваемых при обращении типов форм и элементов управления в 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

При запуске программы появляется исходная форма. Щелчок мыши по форме изменяет ее размер, положение и выводит начальную часть текста (задается в процедуре обработки события Click).

. Нажатие клавиши Enter приводит к изменению размера, положения формы и вывод заключительной части текста (обращение в процедуре обработки события KeyPress к процедуре Change).

ФАЙЛОВЫЙ ВВОД-ВЫВОД

Архитектура современных компьютеров предусматривает наличие оперативной и внешней памяти. В оперативной памяти находятся выполняемая в данный момент программа и обрабатываемые ею данные. После выполнения программы ее данные в оперативной памяти не сохраняются, так как используемые ячейки памяти выделяются для данных другой программы. Технически и программно обусловленные ограниченность объема

оперативной памяти и ее относительно высокая стоимость не позволяют применять ее для постоянного хранения больших объемов информации. Для этого используется внешняя память (магнитные ленты, жесткие и гибкие магнитные диски, лазерные диски), позволяющие хранить сотни мегабайт (1 Мбайт = 1048576 байт) и гигабайт (1 Гбаит = 1.073.741.824 байт) информации и стоимость которых относительно невелика.

Хранение больших объемов информации на внешних носителях с учетом того, что время доступа к данным на внешних носителях на один, два порядка ниже времени доступа к данным в оперативной памяти, требует их хорошо продуманной организации. А возможность альтернативного хранения одних и тех же данных на различных внешних носителях требует использования единых принципов организации данных.

Таким универсальным понятием является файл (набор данных), который используется для работы с внешними данными на любом носителе. Под файлом понимается совокупность данных. Файл состоит из записей. Запись состоит из логически связанных данных, которые передаются между оперативной и внешней памятью за одну операцию ввода-вывода (ввод — передача данных из внешней в оперативную память, вывод - передача данных из оперативной во внешнюю память).

Например, в качестве файла можно рассматривать и используемую ранее колоду перфокарт. Одна карта является одной записью (устройство ввода перфокарт считывает последовательно по одной карте и нельзя считать меньше, чем одну карту). Запись характеризуется длиной (рассмотренная перфокарта является записью фиксированной длины в SO байтов и на ней можно было разместить 80 символов). Записи бывают фиксированной или переменной длины.

По способу доступа к записям файлы подразделяются на файлы последовательного и прямого доступа. При последовательном доступе для доступа к какой-либо записи должны быть пройдены все предыдущие записи, при прямом можно напрямую перейти к нужной записи. Все внешние устройства позволяют использовать последовательный доступ к записям файла. Прямой доступ позволяют использовать только устройства прямого доступа (например, магнитные и оптические диски).

В Visual Basic файлы подразделяются на:

· последовательные (sequential), записи которых могут быть переменной длины;

  • прямого доступа (random access), записи которых могут быть только одинаковой длины;
  • двоичные (Ьупагу) файлы с произвольной группировкой байтов, что позволяет организовать гибкий доступ к данным.

Последовательные файлы

Файлы прямого доступа

Каждая запись последовательного файла представляет собой строку символов, в конце которой содержится символ <CR>, обозначающий переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающий переход на другую строку (line feed, ASCII-код равен 10). Последовательное действие этих двух символов обеспечивает переход к новой записи. После последней записи записывается признак конца файла (end of file), который может проверяться встроенной функцией EOF (возвращает значение True. если обнаружен конец файла, и False, в противном случае).

Для получения доступа к файлу для операции ввода-вывода используется оператор открытия файла, синтаксис которого следующий

Open имя_файла For {Append Input | Output} 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} ”номер_файла,[[{8рс(ч) |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# (вывод в формате дисплея). Во второй части процедуры записи этого файла читаются и выводятся в окно вывода в том виде, как они записаны в файле.

Текст процедуры:

Пример программы.

Программа осуществляет преобразование текстового файла последовательною доступа распаковкой его строк таким образом, чтобы каждая цепочка символов “*п”, где п — однозначное целое число (число пробелов), заменялась указанным числом пробелов.

На форме располагаются:

· командная кнопка “Ввод” (имя — Command 1), щелчок мыши по которой активизирует окно ввода (имя — Textl). Вводимая информация записывается в файл последовательного доступа:

  • командная кнопка “Вывод” (имя — Commands), щелчок мыши по которой обеспечивает вывод записей файла в многострочном текстовом окне (имя Text2):
  • командная кнопка “Преобразование” (имя — Command2), щелчок мыши по которой обеспечивает чтение записей файла, их преобразование в соответствии с заданием и запись новых записей в другой файл:
  • командная кнопка “Вывод” (имя — Command4). щелчок мыши по которой обеспечивает вывод записей повою файла в многострочном текстовом окне (имя Textl);
  • щелчок мыши по кнопке “Конец” прекращает выполнение программы.

Тексты процедур обработки событий:

Private Sub Coriurtandl_Click ()

Text3.SetFocus Open “Filel” For Output As #5

Text3.Text = “” End Sub

Private Sub Command2_Click() Dim Filedata, Filedatal As String Dim NPoz, NProbel As Integer Close #5

Open “Filel” For Input As tt5 Open “File2” For Out-put As #6 Do While Not EOF(5) Line Input #5, Filedata Filedatal = “” 1=1 Do While InStrfI, Filedata, “*”) > 0

NPoz = InStr(I, Filedata, “*”) Filedatal = Filedatal + Mid$(Filedata, 1, NPoz - I) NProbel = Val (Mid$ (Filedata, NPoz +1, 1);

Fiiedatal = Filedatal + String$(NProbel, “ I.= NPoz + 2 Loop

Filedatal = Filedatal + Mid$(Filedata, I) Write #6, Filedatal Loop

Close #5 Close ft6 End Sub

Private Sub Command3_Click() Dim Filedata As String Close #5

Text2.Text = “”

Open “Filel” For Input As ft5 Do While Not EOF(5)

Line Input #5, Filedata

Text2.Text = Text2.Text + Filedata:hr$ (13) + Chr$(10)

Loop End Sub

‘Private Sub Command4 Click() Dim Filedata As String Open “File2” For Input As #6 Do While Not EOF(6) Line Input tt6, Filedata

Textl.Text = Textl.Text + Filedata + Chr$(13) ^ Chr$(10)

Loop Close #6 End Sub

Private Sub Command5_Click()

Kill “Filel”

Kill “File2”

End End Sub

Private Sub Text3_KeyPress(keyAscii As Integer) Dim Filedata As String If keyAscii = 13 Then Filedata = Text3.Text

Write tt5, Filedata Text3.Text •= “”



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 232; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.40.207 (0.042 с.)