VR
Virtual Reality On-line   Delphi
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi.
Работа с системным реестром
:
Logo

Мне пришло уже несколько писем с просьбой объяснить, как работать с системным реестром. Так как это достаточно большой вопрос, то выносить его в раздел "Каком к верху" не возможно, поэтому я решил посвятить этому отдельную статью. Работы будет много, так что запасайся валерьянкой.

На рисунке 1 ты можешь увидеть форму, которая нам понадобиться. Если ты любишь выполнять примеры самостоятельно, а не использовать мои готовые исходники, то нарисуй нечто подобное.
Logo
Рис 1. Пример формы

Прежде чем приступать к программированию необходимо в разделе uses добавить модуль registry. Теперь всё готово к рукоблудству. Приступим!!!

Начнём с записи в реестр. Создай событие OnClick для первой кнопки (у меня она с именем "Записать") и напиши там следующее:

procedure TForm1.Button1Click(Sender: TObject);
var
 RegIni:TRegIniFile;
begin
 RegIni:=TRegIniFile.Create('Software');
 RegIni.OpenKey('VR-online', true);
 RegIni.WriteString('Razd', 'Param', Edit1.Text);
 RegIni.Free;
end;

Первая строка (RegIni:=TRegIniFile.Create('Software')) создаёт переменную RegIni типа TRegIniFile, через которую мы будем работать с реестром. В этом объекте (TRegIniFile) реализованы все необходимые нам функции, которые позволяют получить очень простой доступ к реестру. В скобках я указываю имя подраздела, с которым я собираюсь работать. Сразу возникает вопрос: а внутри какого основного раздела Delphi будет искать подраздел "Software"? Ответ: HKEY_CURRENT_USER. Этот раздел используется по умолчанию.

Итак, первая строка инициализирует реестр и текущем разделом становиться HKEY_CURRENT_USER\ Software. Если бы мы написали нашу первую строку так: RegIni:=TRegIniFile.Create(' Network') то текущим разделом был бы уже: HKEY_CURRENT_USER\ Network.

В принципе, мы уже можем приступать к записи, но я решил открыть ещё подраздел: RegIni.OpenKey('VR-online', true). OpenKey - открывает следующий подраздел, имя которого указано в качестве первого параметра в скобках. Второй параметр означает: создавать ли раздел если его нет?. У меня стоит значение true - это значит, что если такого подраздела нет, то он будет создан. Если поставить false, то ничего создаваться не будет.

Итак, теперь текущий раздел у нас HKEY_CURRENT_USER\ Software\ VR-online. Давай уже что-нибудь запишем: RegIni.WriteString('Razd', 'Param', Edit1.Text). Функция WriteString записывает строку в текущий раздел реестра. Первый параметр - имя подраздела в текущем разделе, т.е. наше значение будет записываться в HKEY_CURRENT_USER\ Software\ VR-online\ Razd. Обязательно учитывай это. Второй параметр - имя записываемого параметра, а третий - значение параметра. В качестве значения я использую строку записанную в Edit1.

Последняя строка RegIni.Free уничтожает созданную нами переменную.

Вздохнём с облегчением. Запись в реестре мы сделали. Можно запустить прогу и проверить на практике, как произошла эта запись. Когда наиграешься возвращайся сюда, и мы продолжим изучение реестра.

Для записи в реестр мы использовали процедуру WriteString. Но она не единственная, есть ещё WriteBool (для записи булево значения) и WriteInteger (для записи целого значения). У всех у них одинаковое количество параметров и все они похожи: первый означает имя подраздела, второй - имя параметра, третий - значение. Вот пример их использования.

RegIni.WriteInteger('Razd', 'Param', 1);
RegIni.WriteBool('Razd', 'Param', true);

Теперь перейдём к чтению параметра. Создай событие OnClick для второй кнопки (у меня она с именем "Считать") и напиши там:

procedure TForm1.Button2Click(Sender: TObject);
var
 RegIni:TRegIniFile;
begin
 RegIni:=TRegIniFile.Create('Software');
 RegIni.OpenKey('VR-online', true);
 Edit1.Text:=RegIni.ReadString('Razd', 'Param', 'Default');
 RegIni.Free;
end;

Практически всё здесь, как и при записи. Точно так же создаётся переменная и открывается раздел. Затем идёт функция RegIni.ReadString, которая непосредственно читает значения. В качестве первого параметра выступает имя раздела, второй - имя параметра, и третий - значение по умолчанию. Функция возвращает считанное значение, а если его нет, то функция вернёт значение по умолчанию (то, что ты указал в третьем параметре 'Default').

Для чтения значений из реестра есть ещё две функции: ReadBool (читать булево значение) и ReadInteger (читать число). Вот пример их использования:

Edit1.Text:=RegIni.ReadInteger('Razd', 'Param', 1);
Edit1.Text:=RegIni.ReadBool('Razd', 'Param', true);

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

DeleteValue - удаляет параметр. В скобках ты должен указать имя параметра. Например, для того чтобы удалить созданный нами параметр (Param), мы должны написать:

RegIni.OpenKey('VR-online', true);
RegIni.OpenKey('Razd', true);
RegIni.DeleteValue('Param');

DeleteKey - удаляет раздел. В скобках указывается имя раздела для удаления. У объекта TRegIniFile эта функция имеет два параметра, но я тебе советую использовать эту же функцию его предка TRegistry. Для этого нужно написать TRegistry(RegIni). DeleteKey( 'Razd' );.

RootKey - это свойство объекта TRegIniFile, которое указывает на головной раздел, который сейчас используется. Как я уже говорил, по умолчанию это HKEY_CURRENT_USER. Чтобы изменить это значение, нужно просто присвоить другое. Нарпимер:

procedure TForm1.Button5Click(Sender: TObject);
var
 RegIni:TRegIniFile;
begin
 RegIni:=TRegIniFile.Create('Software');
 RegIni.RootKey:=HKEY_LOCAL_MACHINE;
 RegIni.OpenKey('VR-online', true);
 RegIni.WriteString('Razd', 'Param', Edit1.Text);
 RegIni.Free;
end;

Вот и всё. Это основные функции, которых тебе хватит надолго. С помощью их можно сделать практически всё. Теперь ты можешь использовать системный реестр в своих корыстных целях. Удачи!!!

 Исходники примера забирай здесь


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©