Закрываем поиск

FindClose(SearchRec); end;

На компакт диске, в директорииПримерыГлава 10FindFileты можешь увидеть пример этой программы.


 

 

10.11 Работа с системным реестром

этой главе я хочу тебе рассказать, как можно работать с системным реестром. Лично я люблю для этого использовать объект TRegIniFile. Он достаточно прост и удобен, поэтому я и тебе советую работать с ним. Для простого

сохранения каких-то параметров программы этого объекта будет достаточно.

Давай разберёмся с этим объектом. Допустим, что у нас есть переменная RegIni типа TRegIniFile. Чтобы её инициализировать, нужно присвоить переменной результат вызова метода Create объекта TRegIniFile:

RegIni:=TRegIniFile.Create('Software');

По умолчанию, при инициализации ты получаешь доступ к разделу HKEY_CURRENT_USER. Методу Create нужно передать только один параметр – имя подраздела, который будет сразу открыт в разделе HKEY_CURRENT_USER.

Итак, после выполнения этого кода мы получили доступ к разделу HKEY_CURRENT_USERSoftware. А что если ты хочешь открыть ещё подраздел и получить доступ к HKEY_CURRENT_USERSoftwareMicrosoft. Для открытия подразделов у объекта TRegIniFile есть метод OpenKey. Вот так можно открыть подраздел «Microsoft»:

RegIni.OpenKey('Microsoft', true);

У метода OpenKey уже два параметра:

1. 1. Имя подраздела, который надо открыть.

2. 2. Надо ли создавать подраздел, если он не существует.

 

Если в качестве второго параметра передать false, и подраздел не будет существовать, то произойдёт ошибка и ничего не откроется, т.е. ты останешься там же, где и был. Ну а если мы передадим true и раздел не будет существовать, то программа автоматически создаст его.

Теперь разберёмся с чтением и записью. Для чтения есть несколько методов:

. • ReadBool – прочитать булево значение (true или false).

. • ReadInteger – прочитать целое число.

. • ReadString – прочитать строку.

 

Все они очень похожи и имеют одинаковое количество параметров. Единственная разница – в типе третьего параметра. Давай подробно рассмотрим ReadString, а остальное уже будем использовать по аналогии с этим методом.

У методов чтения есть три параметра:

1. 1. Имя подраздела, в из которого мы хотим прочитать. Допустим, что мы открыли раздел Microsoft и находимся сейчас в реестре по адресу HKEY_CURRENT_USERSoftware Microsoft. Если мы захотим прочитать строку из подраздела HKEY_CURRENT_USERSoftwareMicrosoft MySoftware, то в качестве первого параметра ты должен написать MySoftware.

2. 2. Имя параметра. Если ты хочешь, чтобы параметр звался как Path, то укажи Path :).

3. 3. Значение, которое будет использоваться по умолчанию, если такой параметр не существует. Для метода ReadString это должна быть строка или переменная типа строка.

 

Сразу хочу предупредить, что даже если ты будешь читать или записывать в реестр число с помощью методов WriteInteger или ReadInteger, объект TRegIniFile всё равно будет сохранять и читать эти числа как строки. А только после прочтения преобразовывать в число. Так что TRegIniFile реально хранит все данные в реестре только как строки. Если ты хочешь сохранять числа в реестре как самые простые числа, то нужно воспользоваться объектом TRegistry.

Итак, давай взглянём на команду чтения в действии:

 

Str:=RegIni.ReadString('MySoftware', 'Path', 'c:');

В этом примере я читаю из подраздела MySoftware параметр Path. Если такой параметр не существует и не может вернуть значение, то будет возвращено значение по умолчанию «С:». Результат чтения я записываю в переменную Str.

Точно так же происходит и запись, только в качестве третьего параметра нам надо указать не значение по умолчанию, а значение, которое надо записать. Для записи используются так же три метода:

. • WtiteBool – записать булево значение (true или false).

. • WtiteInteger – записать целое число.

. • WtiteString – записать строку.

 

Простейший пример записи выглядит так:

RegIni.WriteString('MySoftware', 'Path', 'c:Windows');

В этом примере я записываю в подраздел MySoftware параметр Path. Значение, которое будет записано равно третьему параметру - «С:Windows».

После всех операций с реестром, его нужно закрыть с помощью метода Free:

RegIni.Free;

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

Я создал простейшую форму с одной только кнопкой «Закрыть».

Теперь я создал обработчик события OnShow, в котором я должен восстановить параметры программы, которые были после последнего закрытия проги. Чтобы не загромождать этот обработчик я просто написал вызов метода LoadProgParam. Этого метода пока не существует, но мы его скоро напишем.

procedure TForm1.FormShow(Sender: TObject); begin LoadProgParam; end;

Теперь я создал обработчик события OnClose. Здесь будут сохраняться параметры окна. Я опять не буду ничего загромождать и просто вызову метод SaveProgParam.

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

Если ты сейчас попытаешься скомпилировать прогу, то получишь три ошибки. Компилятор Delphi проругается на то, что не может найти процедуры LoadProgParam и SaveProgParam. Давай напишем их. Для этого подымись в начало модуля и найди раздел описания закрытых процедур private. Опиши там эти две процедуры без всяких параметров:

private { Private declarations } procedure LoadProgParam; procedure SaveProgParam;

Теперь нажми сочетание клавиш Ctrl+Shift+C и Delphi создаст заготовки под эти процедуры:

procedure TForm1.LoadProgParam;
begin
end;

procedure TForm1.SaveProgParam;
begin
end;

Теперь напишем сами эти процедуры. Начнём с SaveProgParam:

procedure TForm1.SaveProgParam; var FIniFile: TRegIniFile;