Язык программирования Delphi. Работа с системным реестром:
Мне пришло уже несколько писем с просьбой объяснить, как работать с системным реестром. Так как это достаточно большой вопрос, то выносить его в раздел "Каком к верху" не возможно, поэтому я решил посвятить этому отдельную статью. Работы будет много, так что запасайся валерьянкой.
На рисунке 1 ты можешь увидеть форму, которая нам понадобиться. Если ты любишь выполнять примеры самостоятельно, а не использовать мои готовые исходники, то нарисуй нечто подобное.
Рис 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 (для записи целого значения). У всех у них одинаковое количество параметров и все они похожи: первый означает имя подраздела, второй - имя параметра, третий - значение. Вот пример их использования.
Теперь перейдём к чтению параметра. Создай событие 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 (читать число). Вот пример их использования:
Дальше я не буду приводить полные процедуры, а только познакомлю тебя с функциями объекта TRegIniFile, с которым мы работаем.
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;
Вот и всё. Это основные функции, которых тебе хватит надолго. С помощью их можно сделать практически всё. Теперь ты можешь использовать системный реестр в своих корыстных целях. Удачи!!!