Статьи

Грамотно работаем с реестром

Часть 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
Hosted by uCoz