Электронная библиотека » Евгений Матвеев » » онлайн чтение - страница 13


  • Текст добавлен: 16 октября 2020, 08:02


Автор книги: Евгений Матвеев


Жанр: Прочая образовательная литература, Наука и Образование


Возрастные ограничения: +12

сообщить о неприемлемом содержимом

Текущая страница: 13 (всего у книги 18 страниц)

Шрифт:
- 100% +
11.3. Контекстное меню

Процесс создания контекстного меню ничем не отличается от разработки обычной строки меню, только пункты контекстного меню вызываются на экран программным способом, с использованием метода формы PopupMenu (Показать меню).

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

Откройте окно кода и напишите процедуру Form_MouseDown:


Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then ‘ проверка нажатия кнопки

PopupMenu mnuFile ‘ отображение меню на экране

End If

End Sub


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

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


11.4. Правила составления меню

Теперь можно сделать несколько замечаний по правилам хорошего тона при составлении меню приложения:

старайтесь придерживаться общепринятой структуры меню, существующей в аналогичных приложениях,

желательно ограничиться двумя-тремя уровнями, чтобы пользователю было легче найти нужную команду меню,

в конце названий пунктов меню, открывающих диалоговые окна, принято добавлять символ троеточия «», например Save As… (Сохранить как…).

Глава 12. Файловые операции

В этой главе вы научитесь:

• разбираться в разнообразии файловых операций,

• использовать различные режимы работы с файлами,

• открывать и закрывать дисковые файлы,

• записывать в них информацию и производить чтение,

12.1. Разнообразие подходов для работы с файлами

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

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

Язык программирования Visual Basic поддерживает широкое разнообразие подходов для работы с файлами, которое осуществляется с помощью:

• инструкций непосредственного чтения и записи в файлы,

• элементов управления и их методов,

• встроенных процедур,

• внешних процедур,

• других приложений.

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

Написание кода программы, предназначенной для чтения и записи в файлы разных типов, будет рассмотрено далее в настоящей главе.

Некоторые элементы управления сами могут осуществлять файловые операции. Так, объект Data (Данные) предоставляет возможность просматривать, изменять и добавлять новую информацию в файлы баз данных.

Встроенные процедуры обычно специализированы для работы с файлами определенного типа. Например, процедуры LoadPicture (Загрузить рисунок) и SavePicture (Сохранить рисунок), описанные в 9-й главе, оперируют исключительно с графическими файлами.

Язык Visual Basic, кроме использования собственных средств, позволяет вызывать внешние процедуры API – Application Program Interface (Интерфейс прикладных программ) операционной системы Windows для осуществления файловых операций. Некоторые из вызовов API мы рассмотрим уже в следующей главе.

И, наконец, с помощью объекта OLE (Связь и внедрение объектов) возможно управление другими приложениями, которые будут сами считывать и записывать данные в файлы.

12.2. Этапы выполнения файловых операций

Visual Basic предусматривает определенный порядок непосредственной работы с файлами, которого необходимо придерживаться, чтобы не возникла ошибка выполнения программы:

• получение файлового номера,

• открытие файла, либо его создание с последующим открытием,

• чтение или запись данных в файл,

• закрытие файла.

12.3. Получение файлового номера

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

Получение файлового номера производится с помощью встроенной функции FreeFile (Свободный файл), возвращающей первый свободный файловый номер, доступный операционной системе Windows:


FreeFile ([диапазонНомеров])


Необязательный аргумент диапазон номеров является выражением, указывающим диапазон, из которого возвращается следующий свободный номер файла. Допустимые значения аргумента:

• 0 – задает возвращение номера файла из диапазона 1 – 255.

• 1 – задает возвращение номера файла из диапазона 256 – 511.

Вот пример, где определяется переменная intFileNumber и туда записывается свободный файловый номер:


Dim intFileNumber As Integer

intFileNumber = FreeFile ()

12.4. Открытие файла

Открыть или создать новый файл можно инструкцией Open (Открыть). Синтаксис ее использования следующий:


Open путь For режим [Access доступ] [блокировка] As [#] номерФайла [Len=длина]


Аргумент путь должен содержать имя файла. Если данный аргумент описывает несуществующий файл, такой файл будет создан.

При открытии выбирается один из нескольких режимов доступа к файлам:

Input (Ввод), Output (Вывод) или Append (Добавление) используются для последовательного чтения или записи текстовых файлов, состоящего из символьных строк,

Random (Произвольный) необходим для хранения информации в блоках одинаковой длины, когда структура файла похожа на одномерный массив или базу данных, чаще всего применяется для сохранения значений переменных на жесткий диск,

Binary (Двоичный) предоставляет наиболее широкие возможности для программиста, позволяя считать или записать один байт или их последовательность в любом месте файла.

Доступ конкретизирует, какие типы операций будут разрешены с открытым файлом:

• Read (Чтение),

• Write (Запись),

• Read Write (Чтение-запись).

Блокировка может ограничивать операции, выполняемые с открытым файлом другим процессами:

• Shared (Разделяемый),

• Lock Read (Блокировка чтения),

• Lock Write (Блокировка записи)

• Lock Read Write (Блокировка чтения-записи).

Номер файла обычно хранится в переменной, которая и указывается при ссылке на конкретный файл.

Длина в байтах, указанная после ключевого слова Len, представляет собой число, меньшее либо равное 32 767. Для файлов с произвольным доступом это значение является длиной записи, а с последовательным доступом – числом буферизуемых символов.

Вот пример открытия текстового файла TEST. TXT для последовательного доступа в режиме Output (Вывод):


Open «TEST. TXT» For Output As #intFileNumber


12.5. Запись в последовательный файл

При последовательном доступе запись в файлы осуществляется с помощью инструкций Print # (Напечатать в #) или Write # (Записать в #). Различие между этими двумя инструкциями заключается в способе записи информации в текстовый файл и необходимости использования соответствующих инструкций чтения из файла (Рис.12.1).


Рис.12.1. Различия между инструкциями

Print # (Напечатать в #) и Write # (Записать в #)


Инструкции Print # (Напечатать в #) и Write # (Записать в #) имеют одинаковый синтаксис:


Print #номерФайла, [списокВывода]

Write #номерФайла, [списокВывода]


Наряду с обязательно номером файла можно указать список вывода в виде одного или нескольких выражений. Если список вывода отсутствует, то в файл будет записана пустая строка.

Инструкция Print # (Напечатать в #) просто записывает одну строку в файл таким же образом, как она выводится на экран аналогичным методом Print (Напечатать), а Write # (Записать в #) – добавляет символы-разделители, что дает возможность сохранить в одной строке значения нескольких переменных.

Ниже приведены правила, которые используются при записи данных в файл с помощью инструкции Write # (Записать в #), применяемые Visual Basic независимо от национальных настроек Windows:

• в качестве десятичного разделителя цифровых данных всегда используется точка,

• логические значения записываются в виде ключевых слов #TRUE# или #FALSE#,

• дата и время сохраняются в формате #гггг-мм-дд чч: мм: сс#,

• значения Empty (Пустое) никак не записываются,

• значения Null (Фиктивное) записываются как #NULL#,

• данные типа Error (Ошибка) отображаются в виде #ERROR кодОшибки#.

Пример записи двух строк в открытый текстовый файл:


Print #intFileNumber, «Первая строка символов», «еще текст»

Write #intFileNumber, «Вторая строка символов», «еще текст»


Результат записи этих строк в файл с именем TEST. TXT можно увидеть на рисунке (Рис.12.2).


Рис.12.2. Результат работы инструкций

Print # (Напечатать в #) и Write # (Записать в #)


Запись данных в файлы, открытые в режиме Random (Произвольный) или Binary (Двоичный), осуществляется инструкцией Put (Вывести). Записанная информация затем должна быть считана парной инструкцией Get (Прочитать). Синтаксис инструкции Put (Вывести):


Put [#] номерФайла, [номерЗаписи], имяПеременной


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

Если номер записи опущен, происходит сохранение данных, начиная с текущей позиции указателя, на которую он был установлен после выполнения одной из инструкций: Put (Вывести), Get (Прочитать) или Seek (Искать).

Имя переменной может содержать название переменной, константы или массива любого типа, кроме ссылки на объект. Кроме того, здесь может содержаться любое выражение.

Для записи данных в файлы, открытые в режиме Random (Произвольный), с помощью инструкции Put (Вывести), применимы следующие правила:

• длина записи, указываемая в инструкции Open (Открыть) после ключевого слова Len, должна быть, по крайней мере, на 2 байта больше реальной длины данных, так как инструкция Put (Вывести) сначала записывает в файл двухбайтовый дескриптор, содержащий длину переменной, а только затем ее содержимое,

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

Для файлов, открытых в режиме Binary (Двоичный), применимы другие правила:

• длина записи, указываемая в инструкции Open (Открыть) после ключевого слова Len, игнорируется, а все переменные записываются на диск непрерывно, т.е. без заполнения пространства между записями текущим содержимым буфера файла,

• при записи любых массивов, кроме являющихся элементами типов, определяемых пользователем, инструкция Put (Вывести) записывает только данные, а дескриптор не записывается.

Пример записи значения свойства Caption (Заголовок) объекта Form1 в файл, открытый для доступа в режиме Random (Произвольный) или Binary (Двоичный):


Put #intFileNumber,, Form1.Caption

12.7. Чтение из последовательного файла

Чтение из последовательных файлов производится с помощью инструкций Line Input # (Ввести строку из #) или просто Input # (Ввести из #).

Выбор одной из этих инструкций для чтения из текстового файла зависит от использовавшейся до этого инструкции записи (Рис.12.3).


Рис.12.3. Различия между инструкциями

Line Input # (Ввести строку из #) и Input # (Ввести из #)


Инструкции Line Input # (Ввести строку из #) и Input # (Ввести из #) обладают похожим синтаксисом:


Line Input #номерФайла, имяПеременной

Input #номерФайла, списокПеременных


Проще в использовании инструкция Line Input # (Ввести строку из #), считывающая из файла одну строку текста в указанную переменную.

В противоположность предыдущей, инструкция Input # (Ввести из #) присваивает значения элементов одной строки сразу нескольким переменным.

Пример чтения двух строк из открытого текстового файла в переменные str1, str2 и str3:


Line Input #intFileNumber, str1

Input #intFileNumber, str2, str3

12.8. Чтение из файла произвольного доступа или двоичного файла

Чтение данных из файлов, открытых в режиме Random (Произвольный) или Binary (Двоичный), осуществляется инструкцией Get (Прочитать), синтаксис которой аналогичен соответствующей парной инструкции Put (Вывести):


Get [#] номерФайла, [номерЗаписи], имяПеременной


Все сказанное выше про использование аргументов инструкции Put (Вывести), применимо и к рассматриваемой инструкции Get (Прочитать).

Пример инициализации значения свойства Caption (Заголовок) объекта Form1 из файла, открытого для доступа в режиме Random (Произвольный) или Binary (Двоичный), в котором до этого было сохранено нужное значение:


Get #intFileNumber,, Form1.Caption

12.9. Перемещение указателя чтения / записи

Понятие указателя чтения/записи обозначает порядковый номер записи для файла, открытого в режиме Random (Произвольный), либо номер байта для режима Binary (Двоичный), начиная с которого будет производиться следующая операция чтения/записи инструкцией Put (Вывести) или Get (Прочитать).



Сразу после открытия файла указатель чтения/записи устанавливается на начало файла. Изменение положения указателя происходит после использования инструкций Put (Вывести), Get (Прочитать) или Seek (Искать) (Рис.12.4).


Рис.12.4. Перемещение указателя чтения/записи в файле

после выполнения инструкций Put (Вывести), Get (Прочитать) или Seek (Искать)


Инструкция Seek (Искать) задает произвольное положение указателя для следующей операции чтения/записи:


Seek [#] номерФайла, позиция


Позиция может быть любым выражением, результатом которого является число в диапазоне 1 – 2 147 483 647. Установка указателя нулевое или отрицательное положение приведет к возникновению ошибки.



Пример использования инструкции Seek (Искать) для установки указателя чтения/записи на пятую запись файла, открытого в режиме Random (Произвольный), или на пятый байт файла, открытого в режиме Binary (Двоичный):


Seek #intFileNumber, 5

12.10. Закрытие файла

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

Производится закрытие файлов с помощью инструкции Close (Закрыть), обладающей несложным синтаксисом:


Close [списокНомеровФайлов]


Необязательный аргумент список номеров файлов представляет один или несколько файловых номеров:


[#] номерФайла [, [#] номерФайла]…


Если данный аргумент опущен, то закрываются все файлы, открытые ранее с помощью инструкции Open (Открыть).

Пример использования инструкции Close (Закрыть):


Close #intFileNumber

12.11. Примеры файловых операций

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

Откройте окно кода и создайте процедуру обработки события Form_Click:


Private Sub Form_Click ()

Dim intFileNumber As Integer ‘ объявляем переменную

intFileNumber = FreeFile () ‘ получаем номер файла

Open «TEST. TXT» For Output As #intFileNumber ‘ открываем файл и записываем в него данные

Print #intFileNumber, «Первая строка символов», «еще текст»

Write #intFileNumber, «Вторая строка символов», «еще текст»

Close #intFileNumber ‘ закрываем файл

MsgBox «Файл записан успешно!» ‘ выводим сообщение

End Sub


Запустите приложение и щелкните мышью на форме. Должен мигнуть индикатор жесткого диска компьютера и появиться сообщение (Рис.12.5).


Рис.12.5. Окно сообщения, информирующее

об успешной записи файла TEST. TXT


Завершите работу приложения и перейдите в режим проектирования.

Для контроля произошедшей записи данных в файл запустите Проводник (Explorer) с помощью команды Пуск – Программы – Проводник (Start – Programs – Explorer) и выберите папку C:Program FilesMicrosoft Visual StudioVB98 или другую папку, в которую вы установили Visual Basic (Рис.12.6).


Рис.12.6. Папка Visual Basic,

открытая в Проводнике (Explorer)


Дважды щелкните мышью на файле TEST. TXT. Загрузится программа Блокнот (Notepad), показав на экране содержимое этого файла (Рис.12.7).


Рис.12.7. Содержимое файла TEST. TXT


Закройте окно программы Блокнот (Notepad) и вернитесь в Visual Basic, щелкнув на нем в строке Панели задач (Taskbar) или с помощью комбинации клавиш [Alt] + [Tab].

Снова откройте окно кода с процедурой обработки события Form_Click и измените ее тело таким образом, что теперь она будет читать строки из файла TEXT. TXT:


Private Sub Form_Click ()

Dim intFileNumber As Integer ‘ объявляем переменные

Dim str1, str2, str3

intFileNumber = FreeFile () ‘ получаем номер файла

Open «TEST. TXT» For Input As #intFileNumber ‘ открываем файл для чтения

Line Input #intFileNumber, str1 ‘ чтение 1-й строки из файла

Input #intFileNumber, str2, str3 ‘ чтение 2-й строки из файла

Print «str1:» & str1 ' выводим переменные на экран

Print «str2:» & str2

Print «str3:» & str3

Close #intFileNumber ‘ закрываем файл

End Sub


Еще раз запустите приложение и щелкните мышью на поверхности формы. Должен снова мигнуть индикатор жесткого диска, а на поверхности формы распечататься значения переменных, которые были прочитаны из файла (Рис.12.8). Затем завершите работу приложения.


Рис.12.8. Значения переменных, прочитанных из файла TEST. TXT

12.12. Другие инструкции для работы с файловой системой

Visual Basic предоставляет необходимые возможности для работы с различными компонентами файловой системы: дисками, папками и файлами, для чего он имеет соответствующие инструкции:

ChDrive (Сменить диск),

ChDir (Сменить папку),

MkDir (Создать папку),

RmDir (Удалить папку),

Kill (Уничтожить).

Инструкция ChDrive (Сменить диск) изменяет текущий диск, делая активным любое из доступных в системе дисковых устройств. Синтаксис инструкции следующий:


ChDrive диск


Обязательный аргумент диск является строковым выражением, указывающим существующий диск. Независимо от длины строки аргумента, инструкция ChDrive (Сменить диск) использует только первый символ. Если этот аргумент представляет собой пустую строку, то текущий диск не меняется.

Примеры использования инструкции ChDrive (Сменить диск):


ChDrive «D»

ChDrive Drive1.Drive


Инструкция ChDir (Сменить папку) делает текущей указанную папку (каталог):


ChDir путь


Аргумент путь является строковым выражением, определяющим текущую папку. Путь может содержать имя диска. Если диск не указан, инструкция ChDir (Сменить папку) изменяет текущую папку на активном диске.

Примеры использования инструкции ChDir (Сменить папку):


ChDir «C:Windows»

ChDir Dir1.Path



Инструкция MkDir (Создать папку) создает новую папку:


MkDir путь


Путь, как и в предыдущем случае, определяет полный путь к создаваемой папке. Если диск не указан, то инструкция MkDir (Создать папку) создает новую папку на текущем диске.

Примеры использования инструкции MkDir (Создать папку):


MkDir «C:Pictures»

MkDir Form1.Name


Инструкция RmDir (Удалить папку) удаляет существующую папку, не содержащую файлов и вложенных папок:


RmDir путь


Аргумент путь используется аналогично тому, как это делается в инструкции MkDir (Создать папку).

Примеры использования инструкции RmDir (Удалить папку):


RmDir «C:Pictures»

RmDir Form1.Name



Инструкция Kill (Уничтожить) удаляет указанные файлы с диска:


Kill путь


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

Инструкция Kill (Уничтожить) поддерживает использование подстановочных знаков для нескольких символов "*" и для одиночного символа»?» при указании шаблона имен файлов.

Следует иметь в виду, что инструкция Kill (Уничтожить) не помещает файлы в Корзину (Trash), а сразу удаляет их с диска.

Примеры использования инструкции Kill (Уничтожить):


Kill "*.TXT»

Kill File1.Path & "" & File1.FileName

Глава 13. Сохранение и восстановление конфигурации приложения

В этой главе вы научитесь:

• разбираться в возможностях сохранения настроек,

• сохранять конфигурационные данные,

• восстанавливать конфигурационные данные,

13.1. Возможности хранения переменных конфигурации

Приложения часто требуют сохранения своих специфических настроек между запусками, называемых переменными конфигурации. Например, в переменных конфигурации могут храниться: положение формы, размеры экранных объектов, текущее имя пользователя, пароль, информацию о регистрации приложения, значения переменных по умолчанию и т. д., и т. п.

Существует несколько возможностей по сохранению переменных конфигурации и последующему их восстановлению:

• в файле – с помощью инструкций непосредственного чтения/записи,

• в базе данных – используя объект Data (Данные),

• в реестре (Registry) Windows – воспользовавшись специальными встроенными процедурами Visual Basic.

В предыдущей главе мы рассмотрели инструкции Visual Basic для непосредственной работы с текстовыми и двоичными файлами, которые могут быть использованы для сохранения/восстановления переменных конфигурации в отдельном файле.

С помощью методов объекта Data (Данные) можно оперировать с базой данных, где и хранить нужные значения. Этот объект уже рассматривался в главе про элементы управления.

Наиболее простым и удобным является сохранение/восстановление переменных конфигурации в реестре Windows – специальной многоуровневой базе данных, предназначенной для хранения настроек операционной системы и приложений. Для доступа к реестру предусмотрено несколько встроенных процедур Visual Basic, которые мы и рассмотрим в следующих разделах данной главы.


Страницы книги >> Предыдущая | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Следующая
  • 0 Оценок: 0

Правообладателям!

Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.


Популярные книги за неделю


Рекомендации