...

Примечание

Помимо TRegistry, в модуле Registry можно найти такие классы, KaKTReglniFile и TRegistrylniFile, позволяющие работать с реестром, как будто бы это INI-файл. В ряде случаев использование этих классов вместо TRegistry позволит сократить размер программы, да и значительно ее упростить.

В табл. 7.1 приведены свойства класса TRegistry.

Таблица 7.1. Свойства класса TRegistry

Список констант, которые могут объединяться операцией or для формирования значения свойства Access:

• KEY_QUERY_VALUE – получение значений параметров раздела;

• KEY_ENUMERATE_SUB_KEYS – возможность составления списка подразделов;

• KEY_SET_VALUE – создания параметров в разделе, задание их значений;

• KEY_CREATE_SUB_KEY – создание подразделов;

• KEY_CREATE_LINK – создание символических ссылок (здесь не рассматривается);

• KEY_NOTIFY – право на уведомление об изменении раздела и его подразделов (здесь не рассматривается);

• KEY_READ – комбинация значений KEY_QUERY_VALUE, KEY_ENUMERATE_ SUB_KEYS И KEY_NOTIFY;

• KEY_WRITE – комбинация3Ha4eHtriiKEY_SET_VALUE HKEY_CREATE_SUB_KEY;

• KEY_ALL_ACCESS – комбинация значений KEY_READ, KEY_WRITEH KEY_ CREATEJLINK.

Приводить список всех методов класса TRegistry в книге нерационально, да и незачем. Благо, названия методов говорят сами за себя, к тому же Delphi поставляется с неплохой справочной системой. Здесь же мы остановимся на рассмотрении некоторых особенностей работы с методами класса TRegistry.

Итак, работая с разделами реестра, важно (в общем случае) соблюдать следующую последовательность.

1. Установить значение свойства RootKey, если корневой раздел отличен от HKEY_CURENT_USER. Установить значение свойства Access, если не нужен полный доступ.

2. Открыть методом ОрегКеу или создать методом CreateKey раздел реестра. Если использовать OperKeyReadOnly, то задавать значение свойства Access, как сказано в пункте 1, не имеет смысла.

3. Произвести нужные операции с элементами раздела.

4. Не забыть закрыть раздел, по крайней мере, если вы собираетесь использовать один и тот же объект TRegistry для последовательной работы с несколькими разделами (метод ОрепКеу не закрывает ранее открытый раздел).

Теперь несколько слов о проверке успешности работы методов класса TRegistry. Итак, большинство методов этого класса, осуществляющих доступ к разделам реестра, реализованы как функции, возвращающие True в случае успеха и False при возникновении ошибки. Вероятно, по каким-то чрезвычайно сложным соображениям разработчики класса TRegistry реализовали-таки функцию (!) CreateKey генерирующей исключение ERegistryException в случае неудачи, а не возвращающей значение True или False.

Для чтения/записи параметров разного типа в классе TRegistry предусмотрены пары Read– и Write-методов. Использовать их крайне просто, в чем вы убедитесь далее. Главное, при использовании этих методов не забывать определить тип значений параметров, если он заранее вам точно не известен, например с помощью функции GetDataType. Следует также помнить, что методы работы с параметрами генерируют исключение ERegistryException при возникновении ошибок.

И напоследок о параметре (По умолчанию) – он может присутствовать в каждом разделе. Для обращения к этому параметру используйте пустую строку в качестве имени раздела. Только нужно учитывать, что, в отличие от более ранних версий Windows, в Windows 2000/ХР этот параметр автоматически не создается.

Хранение настроек программы в реестре

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

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

Теперь о деле: есть форма для фильтрации запроса к базе данных, она показанна на рис. 7.7.

Рис. 7.7. Форма фильтра для поиска товара

Содержимое формы не суть важно, а важно то, что при нажатии кнопки ОК положение, размер формы, а также данные, введенные пользователем, будут сохранены в реестре при помощи процедуры SaveFilter (листинг 7.14).

Загрузка...