Реестр: записьчтение

Предводителев Сергей
Работа с системным реестром в Delphi достаточно простая. Использование реестра имеет некоторые преимущества перед INI-файлами. Они заключаются в том, что реестр — более стабильный, и у него нет ограничения на размер.
В Delphi для работы с реестром служит модуль Registry. Он предоставляет программисту методы для открытия, закрытия, сохранения, перемещения, копирования и удаления ключей и разделов реестра.
Итак, разберём использование Registry на небольшом примере при закрытии программы будем сохранять положение и размеры формы в реестре, а при запуске соответственно считывать их. Для начала допишем Registry в раздел uses.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry;
Теперь создадим обработчик события на закрытие формы
procedure TForm1.FormCloseQuery(Sender TObject; var CanClose Boolean);
var
reg TRegistry; //1
begin
reg =TRegistry.Create; //2
reg.RootKey =HKEY_CURRENT_USER; //3
reg.OpenKey(‘softwarereg_test’,true); //4
reg.WriteInteger(‘top’,form1.Top); //5
reg.WriteInteger(‘left’,form1.Left); //6
reg.WriteInteger(‘width’,form1.Width); //7
reg.WriteInteger(‘height’,form1.Height); //8
reg.CloseKey; //9
reg.free; //10
end;
Разберём что же у нас тут делается
1) Объявляем переменную reg типа TRegistry — именно этот тип и служит для работы с реестром.
2) Инициализируем переменную для работы.
3) Свойство RootKey определяет корневой раздел.
4) Метод OpenKey служит для открытия раздела. Первый параметр — это собственно рздел для открытия, а второй параметр определяет создавать ли этот раздел если его не существует.
5 — 8 ) Здесь мы сохраняем нужные параметры формы в определённые ключи реестра. Для этого служат следующие методы
WriteBinaryData(const Name String; var Buffer; BufSize Integer);
WriteBool(const Name String; Value Boolean);
WriteCurrency(const Name String; Value Currency);
WriteDate(const Name String; Value TDateTime);
WriteDateTime(const Name String; Value TDateTime);
WriteExpandString(const Name, Value String);
WriteFloat(const Name String; Value Double);
WriteInteger(const Name String; Value Integer);
WriteString(const Name, Value String);
WriteTime(const Name String; Value TDateTime);
Думаю понятно из названия для сохранения какого типа данных служит каждый из вышеперечисленных методов. Ну а в общем первый параметр — название ключа, а второй собственно данные. Для записи в ключ по умолчанию просто оставьте первый параметр пустым, например WriteInteger(»,56);
9) Метод CloseKey используется для закрытия ключа, открытого функцией OpenKey (см. п.4).
10) Выгружаем переменную reg из памяти.
Всё теперь при закрытии приложения оно будет сохранять данные о размере и положении формы в реестре. Можете проверить запустите программу, а затем выйдите из неё и посмотрите в реестре (с помощью программы regedit) раздел HKEY_CURRENT_USERSoftwarereg_test там и будут наши данные.
Теперь нам надо считывать данные из реестра и соответственно изменять размеры и положение формы. Напишем обработчик события на создание формы
procedure TForm1.FormCreate(Sender TObject);
var
reg TRegistry;
begin
reg =TRegistry.Create;
reg.RootKey =HKEY_CURRENT_USER;
reg.OpenKey(‘softwarereg_test’,true);
form1.Top =reg.ReadInteger(‘top’);
form1.Left =reg.ReadInteger(‘left’);
form1.Width =reg.ReadInteger(‘width’);
form1.Height =reg.ReadInteger(‘height’);
reg.CloseKey;
reg.Free;
end;
Не изученный метод здесь только ReadInteger. Ну как вы наверное догадались, этот метод служит для считывания значения ключа из реестра. Кроме ReadInteger существуют ещё следующие методы
ReadBinaryData(const Name String; var Buffer; BufSize Integer) Integer;
ReadBool(const Name String) Boolean;
ReadCurrency(const Name String) Currency;
ReadDate(const Name String) TDateTime;
ReadFloat(const Name String) Double;
ReadInteger(const Name String) Integer;
ReadString(const Name String) String;
ReadTime(const Name String) TDateTime;
Ну вот собственно и всё, мы сделали программу, которая при выключении сохраняет данные о размере и положении формы в реестре, а при запуске их оттуда считывает; можете проверить.
Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.