- •Строки
- •События, связанные с клавиатурой
- •Списки
- •Управляющий элемент ListBox
- •List
- •Внешний вид: стандартный или с флажком
- •Содержит количество строк в списке
- •Описание
- •Управляющий элемент ComboBox
- •Изменение характеристик шрифта
- •Количество экранных и принтерных шрифтов
- •Файлы
- •Режимы доступа к файлам
- •Текстовые файлы
- •Управляющие элементы для работы с файлами
- •Открыть диалог установка параметров принтера
Здесь первый параметр задает количество байт (число символов), которые нужно прочитать, а второй – дескриптор файла.
Количество символов открытого с помощью оператора Open файла можно получить функцией LOF(<ДФ>). Например,
Private Sub Command1_Click() fn = FreeFile
Open "C:\1.txt" For Input As fn Text1 = Input(LOF(fn), fn)
Close fn
End Sub
Private Sub Form_Load()
Caption="Текстовый файл" Command1.Caption = "Читать 1.txt"
End Sub
Рис.41
Управляющие элементы для работы с файлами
Один из основных способов визуального доступа к текстовым файлам заключается в совместном использовании трех стандартных управляющих элементов, позволяющих организовать выбор диска (DriveListBox), папки (DirListBox) и файла (FileListBox). С помощью этих элементов можно организовать диалог выбора файла для открытия или сохранения. Их основными свойствами являются:
•Drive – обозначение дисковода;
•Path – строка текста, которая может содержать маршрут к диску либо к диску и совокупности вложенных папок, либо полный путь к файлу выбранной папки;
•FileName – имя выбранного файла;
•Pattern – шаблон, определяющий тип выводимых файлов, например, «*.*» или «*.bas».
Первые три свойства доступны только в режиме выполнения.
Чтобы правильно воспользоваться этими элементами, необходимо засинхронизировать их работу в программе с помощью процедур-событий Change, Click и свойства Path следующим образом.
Sub Drive1_Change() |
|
Dir1.Path=Drive1.Path |
|
End Sub |
|
Sub Dir1_Change() |
|
File1.Path= Dir1.Path |
|
End Sub |
|
Sub File1_Click() |
|
IF Right(File1.Path,1)="\" Then |
|
Label1= File1.Path& File1.FileName |
'Вывод на метку |
Else
Label1= File1.Path &"\" &File1.FileName End IF
End Sub
Особенность файловой системы такова, что если файл находится в корневом каталоге диска (например, диска С), то маршрут к файлу (File1.Path) будет представлять собой строку "С:\" (строка, заканчивающаяся символом "\"). Если же файл находится в папке диска, то в конце строки маршрута не будет символа "\", и его следует добавлять.
С помощью условия Right(File1.Path,1)="\" (что означает «проверить последний символ строки маршрута к файлу») определяется правильность маршрута к файлу.
Пример 32. Организовать выбор файла с диска и его просмотр с помощью элементов DriveListBox, DirListBox и FileListBox.
Используя диалог InputBox, запомним строку шаблона (например, "*.txt;*.bas") для выбора файлов. С помощью кнопки Command1 выведем в поле Text1 маршрут к файлу, а содержимое выделенного файла – в текстовое поле Text2. В программе предусмотрим вывод содержимого файла по двойному щелчку на имени файла. Поскольку код процедурысобытия DblClick должен быть тем же, что и для процедуры-события Click, то осуществим вызов последней процедуры с помощью оператора Call.
Dim S As String
Private Sub Form_Load()
Do
S = InputBox("Введи шаблон выбора файлов, например, ", , "*.txt;*.bas") Loop Until S <> ""
End Sub
Private Sub Command1_Click()
If Right(File1.Path, 1) = "\" Then
Text1 = File1.Path & File1.FileName Else
Text1 = File1.Path & "\" & File1.FileName End If
Open Text1 For Input As 1 i% = LOF(1)
' Размер файла не должен превышать 32767 байт при работе с TextBox Text2 = Input(i, 1)
Close 1
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.Pattern = S
File1.Path = Dir1.Path
End Sub
Private Sub File1_DblClick()
Call Command1_Click
End Sub
Рис.42
Второй способ визуального управления файлами – это программное использование компонента CommonDialog, размещенного на форме. Он содержит набор стандартных диалоговых окон для операций открытия и сохранения файла, выбора цвета и шрифта. Чтобы поместить его на панель General ToolBox, следует установить флажок напротив библиотеки
Microsoft Common Dialog Controls 6.0 в списке диалога Components.
Методы и свойства элемента перечислены в следующей таблице.
|
Методы и свойства CommonDialog |
Таблица 17 |
Метод |
Описание |
|
ShowOpen |
Открыть диалог открытия файла |
|
ShowSave |
Открыть диалог сохранения файла |
|
ShowColor |
Открыть диалог выбора цвета |
|
ShowFont |
Открыть диалог выбора шрифта |
|
ShowPrinter |
Открыть диалог установка параметров принтера |
|
|
Описание |
|
Свойство |
|
|
FileName |
Имя выбранного файла в диалоге открытия |
|
Color |
&HBGR-значение выбранного цвета |
|
CancelError |
Если True, то генерируется ошибка при щелчке по кнопке Отмена |
|
Flags |
Опции, устанавливаемые перед вызовом соответствующего диалога |
Чтобы открыть окно соответствующего диалога, нужно обратиться к методу объекта CommonDialog1. Например,
'Открыть диалог открытия файла и выбрать имя
CommonDialog1.ShowOpen |
'Запомнить имя в переменной fname |
|
fname = CommonDialog1.FileName |
|
|
Open fname For Input As 1 |
'Открыть файл для ввода |
|
'Открыть диалог сохранения файла и ввести имя |
||
CommonDialog1.ShowSave |
'Запомнить имя в переменной fname |
|
fname = CommonDialog1.FileName |
|
|
Open fname For Output As 2 |
'Открыть файл для записи |
|
'Открыть диалог выбора цвета и заполнить им фигуру Shape1 |
||
CommonDialog1.ShowColor |
|
|
Shape1.FillStyle = 0 |
|
'Сплошная заливка |
Shape1.FillColor = CommonDialog1.Color |
'Цвет фигуры |
Перед открытием диалога ShowOpen можно установить следующие свойства Flags, равные одной из констант или их совокупности, объединенной операцией OR:
•cdlOFNHideReadOnly – снять с файлов флажок Только для чтения;
•cdlOFNAllowMultiselect – разрешить многократный выбор файлов, при этом диалоговое окно будет состоять из элементов DriveListBox, DirListBox и FileListBox. Если не использовать этот флаг, то окно диалога будет иметь вид окна MS Explorer.
Перед открытием диалога выбора шрифта ShowFont с помощью свойства Flags указывается, какие шрифты Вам понадобятся:
•cdlCFScreenFonts – все экранные шрифты;
•cdlCFTTOnly – только контурные (True Type) шрифты;
•cdlCFEffects – разрешить использование флажков Подчеркивания, Перечеркивания и Цвета символов текста.
Например, открыть диалог для выбора экранного шрифта с возможностью установки начертания.
cd1.Flags = cdlCFScreenFonts Or cdlCFEffects cd1.ShowFont
Перед открытием диалога выбора цвета ShowColor с помощью свойства Flags указывается вид окна:
•cdlCCFullOpen – окно с полным выбором цветов;
•cdlCCPreventFullOpen – окно с неполным выбором цветов.
Пример 33. Организовать выбор файла с диска и его просмотр, редактирование, форматирование, сохранение, изменение цвета символов, цвета фона, используя элемент CommonDialog.
•Разместите на форме с панели General ToolBox усовершенствованное текстовое поле Rich TextBox, предварительно установив флажок напротив библиотеки Microsoft Rich TextBox Control 6.0 в списке диалога Components.
•Разместите на форме семь кнопок с именами (свойства Name):
Открыть, ВыборШрифта, Сохранить, ЦветаТекста, ЦветаФона,
Очистить, Выход и соответствующими надписями (свойства Caption).
Усовершенствованное текстовое поле в отличие от поля TextBox позволяет:
1.загружать и просматривать большие текстовые файлы, размер которых не ограничен 64 Кбайт;
2.автоматически добавлять полоски скроллинга, если текст выходит за пределы поля;
3.форматировать не только весь текст находящийся в поле, но и отдельные фрагменты текста;
4.вставлять объекты, используя технологию Drag & Drop;
5.сохранять текст с параметрами форматирования (с измененным размером, цветом) в текстовом формате или в формате rtf.
При чтении или записи текстовых и rtf файлов в усовершенствованное поле можно указывать свойства TextRTF (по умолчанию) или SelRTF. Первое свойство заменяет весь текст в поле содержимым из файла, а второе вставляет текст из файла в место поля, где находится курсор. Например, чтобы прочитать содержимое файла, достаточно записать:
RichTextBox1.TextRTF = Input(LOF(fn), fn)
Запись же в текстовый файл содержимое усовершенствованного поля можно выполнить так:
Print #fn, RichTextBox1.TextRTF
В поле RichTextBox можно загрузить файл с расширением rtf путем перетаскивания выделенного текста из другого приложения или перетаскивания файла из папки, либо загрузить файл методом LoadFile. Чтобы сохранить содержимое поля на диске, необходимо воспользоваться методом SaveFile. Недостаток этих методов в том, что LoadFile не позволяет отображать цвет фона документа (rtf-файла), загруженного с диска, а SaveFile не позволяет сохранять цвет фона поля в rtf-файле. Однако поле RichTextBox позволяет отображать цвет фона выделенного фрагмента, если документ (rtf-файл) был до этого сохранен, например, в MS Word 'е.
Синтаксис методов:
ИмяRTFОбъекта.LoadFile Файл [,Тип файла] ИмяRTFОбъекта.SaveFile Файл [,Тип файла],
где Файл – это полный путь к файлу, а Тип файла – это одно из двух значений: rtfText или rtfRTF, определяющих в каком формате загружать и сохранять текст.
Если свойство объекта Rich TextBox начинается с приставки Sel (от слова Select), то оно будет относиться к выделенной части текста.
Dim fn As Integer, Fname As String
Private Sub Очистить_Click()
RTF1.BackColor = vbWhite
RTF1 = "" |
|
End Sub |
|
Private Sub Form_Load() |
|
With CommonDialog1 |
'Начальные установки, отображаемые |
.CancelError = True |
'по умолчанию в диалоге выбора шрифта |
.FontName = "Times New Roman"
.FontSize = 20
.FontBold = True
.FontItalic = True End With
End Sub
Private Sub ВыборШрифта_Click()
On Error GoTo 100 With CommonDialog1
.Flags = cdlCFScreenFonts Or cdlCFEffects
.ShowFont
End With
With RTF1
.SelFontName = CommonDialog1.FontName
.SelBold = CommonDialog1.FontBold
.SelItalic = CommonDialog1.FontItalic
.SelFontSize = CommonDialog1.FontSize
.SelStrikeThru = CommonDialog1.FontStrikethru
.SelUnderline = CommonDialog1.FontUnderline
.SelColor = CommonDialog1.Color End With
Exit Sub 100:
MsgBox "Ошибка" & CStr(Err.Number) & " при выборе шрифта." & _ vbCrLf & Err.Description
End Sub
Private Sub Открыть_Click() fn = FreeFile
On Error GoTo 100 With CommonDialog1
'Чередование до вертикальной черты – тип файлов, после - имя файла
.Filter = "Все-файлы|*.*|Rtf-файлы|*.rtf*|Txt-файлы|*.txt"
.FileName = "*.*" 'в поле <Имя файла> диалога
.Flags = cdlOFNHideReadOnly
.ShowOpen |
'Открыть диалог Open и ввести имя файла |
|
End With |
|
|
Fname = CommonDialog1.FileName 'Запомнить имя в переменной |
||
Open Fname For Input As fn |
'Открыть файл для ввода |
|
RTF1 = Input(LOF(fn), fn) |
|
|
Close fn |
|
|
'RTF1.LoadFile Fname |
'или одной строкой вместо верхних трех |
Caption = Fname Exit Sub
100: MsgBox "Ошибка" & СStr(Err.Number) & " при чтении." & _ vbCrLf & Err.Description
End Sub
Private Sub ЦветФона_Click()
On Error GoTo 100 CommonDialog1.ShowColor RTF1.BackColor = CommonDialog1.Color Exit Sub
100:MsgBox "Ошибка" & CStr(Err.Number) & "при выборе цвета фона." _
&vbCrLf & Err.Description
End Sub
Private Sub ЦветТекста_Click()
On Error GoTo 100 CommonDialog1.ShowColor RTF1.SelColor = CommonDialog1.Color Exit Sub
100:
End Sub
Private Sub Сохранить_Click() fn = FreeFile
On Error GoTo 100
CommonDialog1.Filter = "Все-файлы|*.*|Rtf-файлы|*.rtf*|Txt-файлы|*.txt"
CommonDialog1.ShowSave |
'Открыть диалог Save и ввести имя файла |
|
Fname = CommonDialog1.FileName |
'Запомнить имя в переменной |
|
Open Fname For Output As fn |
|
'Открыть файл для записи |
Print #fn, RTF1 |
|
|
'RTF1.SaveFile Fname, rtfRTF |
'или одной строкой вместо верхних трех |
Close fn Exit Sub
100: MsgBox "Ошибка" & CStr(Err.Number) & " при записи." & _ vbCrLf & Err.Description
End Sub
Private Sub Выход_Click()
End
End Sub
Рис.43
Если программа обратится к дисковому устройству или к файлу, которого нет, или пользователь нажмет кнопку Отмена в каком-либо диалоге, то оператор Open и, следующие за ним операторы, не должны выполняться, иначе возникнет ошибка, так как значением свойства CommonDialog1.FileName будет пустая строка. Для подобных случаев существует оператор On Error GOTO <имя метки>, который перехватывает ошибки периода выполнения в текущей процедуре и передает управление по метке блоку операторов, где должны определяться номер и описание ошибки с помощью объекта Err и его свойств Number и Description. Обычно перед меткой ставится один из операторов: Exit Sub, Exit Function,
Exit Procedure, End или Stop.
Для того чтобы перехватить ошибку оператором On Error, которая формируется по щелчку на кнопке Отмена, необходимо установить свойство CommonDialog1.CancelError=True.