Работа № 7

Средства VB 6 для работы с файлами и с панелями общего диалога системы Microsoft Windows

Цель работы: Изучение и использование операторов языка VB 6 для работы с файлами различных типов: последовательными (текстовыми) файлами, файлами произвольного доступа, бинарными файлами. Исследование и использование инструмента Common Dialog для открытия и сохранения файлов, выбора шрифта и цвета, а также использование объекта Clipboard для хранения фрагментов текста, – на примере создания простого текстового редактора.

Контрольные вопросы:

1.  Какими способами можно открыть текстовый файл? Как закрыть текстовый и любой другой открытый файл?

2.  Как записываются данные в открытый для записи текстовый файл? В чем разница между операторами Write и Print?

3.  Как читаются данные из открытого для чтения текстового файла? Чем отличаются друг от друга операторы Input и Line Input? При помощи какой функции можно прочитать из файла заданное число символов? Как прочитать все символы файла?

4.  Что такое пользовательский тип данных и как используется это понятие при работе с файлами произвольного доступа (raf)?

5.  С помощью каких операторов из файла raf читаются записи и в файл raf пишутся новые записи?

6.  С какой целью определяется и используется индекс при работе с файлом raf?

7.  Каковы особенности использования бинарных файлов? Как они открываются? Как производится чтение из бинарного файла и запись в бинарный файл?

8.  Как можно применить элемент управления Common Dialog для загрузки содержимого текстового файла в текстовое поле? Как с помощью того же элемента управления сохранить отредактированный текст в текстовом файле?

НЕ нашли? Не то? Что вы ищете?

9.  Как можно применить элемент управления Common Dialog для загрузки содержимого файла rtf в поле Rich Textbox? Как с помощью того же элемента управления сохранить отредактированный текст в файле rtf?

10.  Как можно применить элемент управления Common Dialog для изменения значений параметров шрифта и для изменения цвета текста в окне Textbox (или выделенного фрагмента текста в окне Rich Textbox)?

Пример 7.1. Рассмотрим приложение, демонстрирующее запись в текстовый файл (и чтение из текстового файла) «сведений о сотрудниках» – строк, каждая из которых содержит идентификационный номер, ФИО, дату рождения и место рождения сотрудника. Строки образуют таблицу, которую на экранной форме будут имитировать 4 элемента управления Combo Box (рис. 7.1), образующие массив объектов Comb(i), у которых свойство Style имеет значение 1 – SimpleCombo.

Рис. 7.1. Экранная форма с 4 элементами Combo Box, имитирующими таблицу

Меню приложения Edit призвано вызывать подменю, которое содержит 5 команд редактирования: Добавить запись, Удалить запись, Вставить запись, Изменить запись, Очистить таблицу. Остальные команды меню (рис. 7.1) не нуждаются в комментариях.

Опуская описание этапа проектирования интерфейса, сразу представим программный код данного приложения:

Dim numb As Integer, fio As String, bdate As Date, bloc As String

‘ Синхронизация выделения записи таблицы:

Private Sub Comb_Click(Index As Integer)

i% = Comb(Index).ListIndex

For j% = 0 To 3

Comb(j).Text = Comb(j).List(i):

Comb(j).ListIndex = i

Next j

End Sub

‘ Добавление новой записи в таблицу:

Private Sub mnuAdd_Click()

For j% = 0 To 3

XC(j) = Comb(j).Text

Comb(j).AddItem XC(j)

Next j

End Sub

‘ Удаление записи из таблицы:

Private Sub mnuRemove_Click()

i% = Comb(0).ListIndex

If i < 0 Then

MsgBox "Выделите удаляемую строку", vbExclamation

Else

For j% = 0 To 3

Comb(j).RemoveItem i

Next j

End If

End Sub

‘ Вставка новой записи в таблицу:

Private Sub mnuInsert_Click()

i% = Comb(0).ListIndex

If i < 0 Then

MsgBox "Выделите строку для вставки перед ней", vbExclamation

Else

Comb(0).AddItem InputBox("Введите номер"), i

Comb(1).AddItem InputBox("Введите фио"), i

Comb(2).AddItem InputBox("Введите дату рожд."), i

Comb(3).AddItem InputBox("Введите место рожд."), i

End If

End Sub

‘ Изменение записи в таблице:

Private Sub mnuUpdate_Click()

i% = Comb(0).ListIndex

If i < 0 Then

MsgBox "Выделите изменяемую строку", vbExclamation

Else

Comb(0).List(i) = InputBox("Введите номер", , Comb(0).List(i))

Comb(1).List(i) = InputBox("Введите фио", , Comb(1).List(i))

Comb(2).List(i) = InputBox("Введите дату рожд.", , Comb(2).List(i))

Comb(3).List(i) = InputBox("Введите место рожд.", , Comb(3).List(i))

End If

End Sub

‘ Очистка всей таблицы:

Private Sub mnuClear_Click()

For j% = 0 To 3

Comb(j).Clear

Next j

End Sub

‘ Заполнение таблицы сведениями из текстового файла:

Private Sub mnuLoad_Click()

mnuClear_Click

Open "person. txt" For Input As #1

Do Until EOF(1)

Input #1, numb, fio, bdate, bloc

Comb(0).AddItem numb

Comb(1).AddItem fio

Comb(2).AddItem bdate

Comb(3).AddItem bloc

Loop

Close #1

End Sub

‘ Запись сведений таблицы в текстовый файл:

Private Sub mnuSave_Click()

N% = Comb(0).ListCount

Open "person. txt" For Output As #1

For i = 0 To N - 1

numb = Val(Comb(0).List(i))

fio = Comb(1).List(i)

bdate = CDate(Comb(2).List(i))

bloc = Comb(3).List(i)

Write #1, numb, fio, bdate, bloc

Next i

Close #1

End Sub

‘ Завершение работы приложения:

Private Sub mnuExit_Click()

End

End Sub

Пример 7.2. Рассмотрим приложение, которое демонстрирует использование элементов управления Common Dialog для открытия и сохранения файла, для выбора шрифта и цвета, а также для редактирования текста.

Файл формата TXT будет загружаться в текстовое поле (левое поле на рис. 7.2), а файл формата RTF – в поле Rich Textbox (правое поле на рис. 7.2).

Рис. 7.2. Вид окна приложения после двукратной отработки команды FileOpen и выбора двух файлов для открытия в окне Textbox и Rich Textbox

В окне приложения 4 команды меню (File, Font, Color и Edit), имеющие подменю:

File → Open, Save, Save As;

Color → ForeColor, BackColor;

Edit → Copy, Cut, Paste.

Команды сохранения файла (Save и Save As) здесь реализуются только для формата RTF.

При проектировании формы помимо нестандартного элемента управления Rich Textbox на форму должны быть помещены 3 также нестандартных элемента Common Dialog (для открытия-сохранения файлов, для выбора шрифта и для выбора цвета соответственно).

Для реализации компьютерного интерфейса заполняется следующая таблица свойств:

Имя

объекта

Класс

объекта

Свойство

объекта

Значение свойства

Form1

Form

Caption

“Панели общего

диалога”

mnuFile

Menu Command

Caption

“File”

mnuOpen

SubMenu Command

Caption

“Open”

mnuSave

SubMenu Command

Caption

“Save”

mnuSaveAs

SubMenu Command

Caption

“Save As”

Text1

TextBox

MultiLine

True

RichTextBox1

RichTextBox

MultiLine

True

CommonDialog1

CommonDialog

(Custom)

Закладка Open / Save As

CommonDialog2

CommonDialog

(Custom)

Закладка Font

CommonDialog3

CommonDialog

(Custom)

Закладка Color

В таблице не предствавлены свойства команд меню Font, Color и Edit. Ниже приводится код процедур также лишь для команд меню File (Open, Save и Save As). Составление кода для других команд меню – тема 2-го задания данной работы.

Private Sub mnuOpen_Click()

CommonDialog1.ShowOpen

F$ = CommonDialog1.FileName

If Right(F, 3) = "rtf" Then

RichTextBox1.LoadFile F

ElseIf Right(F, 3) = "txt" Then

Open F For Input As #1

N& = LOF(1)

S$ = Input(N, 1)

Text1.Text = S

Close 1

End If

End Sub

Private Sub mnuSave_Click()

CommonDialog1.ShowSave

F$ = CommonDialog1.FileName

If F = "" Then

mnuSaveAs_Click

Else

RichTextBox1.SaveFile F, rtfRTF

End If

End Sub

Private Sub mnuSaveAs_Click()

CommonDialog1.ShowSave

F$ = CommonDialog1.FileName

RichTextBox1.SaveFile F, rtfRTF

End Sub

В ходе выполнения данной работы студент должен выполнить 2 задания.

Задание 1. В процессе выполнения задания студенты осваивают имеющиеся в VB 6 возможности работы с файлами произвольного доступа (RAF – random access file).

Для заданной таблицы базы данных объявляется пользовательский тип данных, объявляется переменная этого типа (учебное пособие [2], стр. 108 – 112), составляются и отлаживаются процедуры, в которых используется переменная пользовательского типа.

В частности реализуются процедуры для команд меню Записать в файл RAF и Читать из файла RAF. Как и в примере 7.1, для редактирования данных используется массив объектов Combo Box и меню Edit с пятью командами подменю: Добавить запись, Удалить запись, Вставить запись, Изменить запись, Очистить таблицу.

Вариант 1.

Объявить пользовательский тип данных для таблицы «Автомобиль» (табл. 7.1) базы данных «Автосервис».

Табл. 7.1.

Марка

автомобиля

Номер

автомобиля

Код

неисправности

String*30

String*20

Integer

В нижней строке таблицы 7.1 – типы полей.

Используя приложение примера 7.1 как образец, организовать ввод и редактирование данных для представленной таблицы, запись этих данных в файл произвольного доступа и чтение данных из файла произвольного доступа. Как и в примере 7.1, указанные действия реализовать как работу команд меню, показанного на рис. 7.1.

Вариант 2.

Объявить пользовательский тип данных для таблицы «Неисправности» (табл. 7.2) базы данных «Автосервис».

Табл. 7.2.

Код

неисправности

Название

неисправности

Стоимость

ремонта

Integer

String*50

Currency

В нижней строке таблицы 7.2 – типы полей.

Используя приложение примера 7.1 как образец, организовать ввод и редактирование данных для представленной таблицы, запись этих данных в файл произвольного доступа и чтение данных из файла произвольного доступа. Как и в примере 7.1, указанные действия реализовать как работу команд меню, показанного на рис. 7.1.

Задание 2. В ходе выполнения задания студенты дополняют приложение примера 2 новыми возможностями, которые позволяют рассматривать это приложение как простой текстовый редактор.

Вариант 1. С помощью элемента управления Common Dialog реализовать команды меню Font и Color (с подменю Цвет символов и Цвет фона). С помощью этих команд должен обеспечиваться выбор шрифта (его наименования, начертания и размера) для выделенного фрагмента текста в окне Rich Textbox, а также выбор цвета символов выделенного фрагмента и выбор цвета фона всего этого окна.

Указание: При настройке объекта Common Dialog для выбора шрифта с помощью свойства (Custom) обязательно следует установить значение свойства Flags равным 1, 2 или 3 (см. пособие [2], стр. 183).

Вариант 2. С помощью элемента управления Common Dialog реализовать команды меню Edit (подменю Copy, Cut и Paste), назначением которых является копирование или удаление в буфер обмена выделенного фрагмента текста, а также вставка в выделенное место текста содержимого буфера обмена.

Указание: К буферу обмена (объекту Clipboard) можно применять методы SetText и GetText:

Clipboard. SetText RichTextBox1.SelText

RichTextBox1.SelText = Clipboard. GetText