Часть 1. Встроенные функции работы с реестром в Visual Basic.
Таких функций всего четыре:
Имя функции |
Описание функции |
GetSetting |
Получить значение параметра |
GetAllSettings |
Получить массив значений в указанной секции |
SaveSetting |
Сохранить значение параметра |
DeleteSetting |
Удалить параметр (секцию) |
Все они работают с одной конкретной веткой реестра, а именно: HKEY_CURRENT_USER/SOFTWARE/VB and VBA Program Settings/. Обращение к данной ветке, происходит автоматически внутри функции, и поэтому прописывать столь длинный путь нет необходимости. Давайте чуть-чуть подробнее остановимся на каждой из этих функций.
GetSetting и SaveSetting – с ними Вы будете встречаться чаще всего.
GetSetting(appname, section, key[, default])
SaveSetting appname, section, key, setting
appname – строковый параметр, определяет имя приложения и/или проекта, где будут храниться данные. В 99,9 % случаев для каждой программы достаточно одного значения appname. Чтобы не забивать себе голову ненужными вещами, а спустя некоторое время не заниматься длительными поисками в реестре (где же это у меня хранится?), удобней всего использовать объект App (например, App.EXEName).
section – так же строковый параметр, определяет имя подпапки, где хранятся все значения. Таких папок может быть от одной до … Т.е. здесь Вы формируете наличие и расположение папок, так как Вам удобно.
key – строковый параметр, имя, под которым будет храниться Ваше значение. Как рекомендация, давайте ему осмысленные значения.
setting – непосредственно само сохраняемое значение.
[, default] – судя по квадратным скобкам, Вы уже догадались, что это необязательный параметр. Однако желательно все же его заполнять. По крайней мере – это избавит Вас от громоздкой проверки при запуске приложения самый первый раз, когда еще ничего в реестре Вашей программой не прописано.
Для закрепления материала маленький примерчик, демонстрирующий эти две функции.
Private Sub Form_Load()
Me.Left = GetSetting(App.EXEName, "Position", "Left", 0)
Me.Top = GetSetting(App.EXEName, "Position", "Top", 0)
Me.Caption = GetSetting(App.EXEName, "Other", "Caption", "Проба")
End Sub
Private Sub Form_Unload(Cancel As Integer)
SaveSetting App.EXEName, "Position", "Left", Me.Left
SaveSetting App.EXEName, "Position", "Top", Me.Top
SaveSetting App.EXEName, "Other", "Caption", Me.Caption
End Sub
Здесь, при загрузке формы, в самый первый раз, в связи с отсутствием записей в реестре, используются значения по умолчанию. Если Вы после запуска переместили форму, то на выходе новые координаты будут записаны в реестр. При следующем запуске происходит считывание параметров (игнорируя значение по умолчанию) и расположение формы в нужном месте. "Кувыркания" с заголовком здесь приведены просто как пример создания нескольких папок для одного приложения. Теперь, если Вы откроете редактор реестра и пройдете по веточке HKEY_CURRENT_USER/SOFTWARE/VB and VBA Program Settings/, то увидите там папку Project1 (если проект не переименовывался!), а в ней две подпапки "Position" и "Other", с сохраненными в них значениями.
Функция DeleteSetting имеет чуть более простую структуру:
DeleteSetting appname, section[, key]
Параметры appname, section, key – имеют те же описания, что и в предыдущих функциях.
И снова небольшой пример. Добавьте код в Form_Unload, чтобы он выглядел так:
Private Sub Form_Unload(Cancel As Integer)
SaveSetting App.EXEName, "Position", "Left", Me.Left
SaveSetting App.EXEName, "Position", "Top", Me.Top
SaveSetting App.EXEName, "Other", "Caption", Me.Caption
On Error Resume Next
DeleteSetting App.EXEName, "Position", "Left"
End Sub
И при следующей загрузке формы, не найдя нужного параметра, она будет позиционирована по левому краю. Обратите внимание на включение обработчика ошибок. Он необходим для того, чтобы в случае не нахождения данного параметра, не происходило аварийное завершение программы.
Данная строка удаляет только один параметр ("Left"). Если же нам необходимо удалить весь подраздел, то строка должна выглядеть следующим образом:
On Error Resume Next
DeleteSetting App.EXEName, "Position"
Ну и, наконец, последняя встроенная VB-функция, для работы с реестром.
GetAllSettings(appname, section)
Как нетрудно догадаться appname, section – описывают все те же самые параметры, что и предыдущие функции. Данная функция служит для получения массива параметров.
Разместим на форме кнопку, которая будет считывать массив параметров подпапки "Position" и выдавать ее в заголовок. Не забудьте удалить последние две строки в Form_Unload, посвященные, удалению параметров.
Добавим код для кнопки:
Private Sub Command1_Click()
Dim arrSettings As Variant, intLoop As Integer
Me.Caption = vbNullString
arrSettings = GetAllSettings(App.EXEName, "Position")
For intLoop = LBound(arrSettings, 1) To UBound(arrSettings, 1)
Me.Caption =
Me.Caption & " " & arrSettings(intLoop, 0) _
& "=" & arrSettings(intLoop, 1)
Next
End Sub
Чуть поподробнее: arrSettings объявляем как Variant, т.к. в дальнейшем она будет нести функции двумерного массива. intLoop – переменная-счетчик для цикла For-Next.
С помощью функции GetAllSettings, считываем в переменную arrSettings двумерный массив значений. Затем циклом For-Next проходим от первого значения до последнего (в нашем случае их только два). И внутри цикла присваиваем заголовку программы считываемые значения. Обратите внимание, что второй компонент в массиве может принимать только значения 0 или 1. Если 0, то считывается заголовок параметра (key). Если 1, то считывается его значение (setting).
На этом со встроенными функциями бейсика, посвященных реестру можно закончить.
2001 г.
К статьям | Часть 2 |