Доклад: Реестр: запись\чтение
Предводителев Сергей
Работа с системным реестром в 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('software\reg_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_USER\Software\reg_test
там и будут наши данные.
Теперь нам надо считывать данные из реестра и соответственно изменять размеры и положение формы. Напишем обработчик события на создание формы:
procedure TForm1.FormCreate(Sender: TObject);
var
reg:TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('software\reg_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;
Ну вот собственно и всё, мы сделали программу, которая при выключении сохраняет данные о размере и положении формы в реестре, а при запуске их оттуда считывает; можете проверить.
Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.
Список литературы
Для подготовки данной работы были использованы материалы с сайта http://coderpro.fatal.ru/