Registry - системный реестр, существующий в Windows для того чтобы система и программы, в том числе и ваши, могли сохранять и использовать данные о конфигурации. Например, ваша программа могла бы:

Системный реестр является централизованной базой данных в виде иерархического дерева и хранится в двух бинарных файлах USER.DAT и SYSTEM.DAT (каждый из них имеет резервную копию USER.DA0 и SYSTEM.DA0, соответственно) в каталоге Windows. Каждый узел (node) дерева называется ключом (key). Каждый ключ может содержать любое количество ключей называемых подключами (дочерними ключами) (subkey) и данных называемых значениями (value). Значение (value) состоит из параметра (name) и значения (data), а это значение (data) имеет значение (value). В общем как всегда английская беда с терминами и русская с переводом. Я буду использовать следующую терминологию: подключ (дочерний ключ) и параметр (value), который состоит из имени параметра (name) и значения параметра (data). Каждый ключ имеет имя, состоящее из символов с кодами от 32 до 127, исключая обратный слеш (backslash '\'), звездочку ('*') и знак вопроса ('?'). Имена начинающиеся с точки (.) зарезервированы. В пределах ключа имена подключей не должны повторятся. Значения параметров могут содержать и русские буквы (но не допустимо для имен ключей). Программе рекомендуется хранить в реестре не более 1-2Кбайт при этом имея ввиду что запись данных занимает значительно меньше места чем запись ключа. По этому рекомендовано объединять параметры в функциональные группы и сохранять их под одним ключом.

Для того чтобы использовать данные, хранимые в ключе, программа должна открыть (open) этот ключ. Открытие очередного вложенного ключа (подключа) должно происходить относительно уже открытого ключа. Это требование появляется, потому что при вызове функции открытия ей передается дескриптор открытого ключа и путь от него до открываемого ключа (в скобках замечу, что при этом функция возвращает дескриптор открываемого, теперь уже открытого ей, ключа). В системе имеется несколько стандартных всегда открытых ключей. Программа может использовать эти предопределенные дескрипторы как точки входа в реестр.

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

Система поддерживает два предопределенных ключа как корневые ключи (root key) это HKEY_LOCAL_MACHINE и HKEY_USER. А также дополнительные, но тоже корневые и всегда открытые, HKEY_CURRENT_CONFIG (подключ HKEY_LOCAL_MACHINE), HKEY_CURRENT_USER (подключ HKEY_USERS), и HKEY_CLASSES_ROOT (подключ созданный объединением части HKEY_LOCAL_MACHINE и части HKEY_CURRENT_USER).

Все данные рекомендуется разделять на две основные категории.

Обращение к реестру возможно через объект класса TRegisry или непосредственно через Windows функции.

Объект класса TRegisry не создается автоматически, а это значит, что его приходится создавать вручную, правда делается это очень просто. В строке Uses добавить Registry. В разделе var пишете что-то на подобие:

uses ..., ..., Registry;
var

r : TRegistry;

И далее в исполняемой части ну, например, в событии FormCreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
r:=TRegistry.Create;

end;

Было бы не плохо освободить объект при окончании, скажем в событии FormClose:

procedure TForm1.FormClose(Sender:TObject; var Action:TCloseAction);
begin

r.Free;

end;

В этом же событии перед закрытием реестра запишите в него координаты, размер, список файлов и что там еще.

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

procedure TForm1.FormCreate(Sender: TObject);
begin
r:=TRegistry.Create;

r.Free;

end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

r:=TRegistry.Create;

r.Free;

end;

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

Теперь об объекте. Но сначала вспомогательный тип:

HKEY = Integer;

Это и есть дескриптор ключа.

Класс TRegistry


main_back.gif (3425 bytes)

Используются технологии uCoz