Ватажків Сергій
Робота з системним реєстром в 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;
Ну ось власне і все, ми зробили програму, яка при вимиканні зберігає дані про розмір і положення форми в реєстрі, а при запуску їх звідти зчитує; можете перевірити.
Увага! Передрук цієї статті або її частини без узгодження з автором. Якщо ви хочете мати цю статтю на своєму сайті або видати в друкованому вигляді, зв'яжіться з автором.