Подписаться на RSS рассылку
Главная » Учебник по Delphi для начинающих » Урок 11 - Сохраняем настройки программы

Урок 11 - Сохраняем настройки программы

Автор: Борисов Сергей

Практически у любой программы есть параметры которые нужно сохранять при закрытии программы и при следующем запуске загружать. Примером такой программы может быть стандартные программы Блокнот, Paint и многие другие. Например при закрытии прогрммы "Блокнот" сохраняется положение координаты окна программы, его размеры и другие настройки.

Как все это реализовать? Есть несколько вариантов. Можно создать файл в той же папке что и сама программа. Но тут придется реализовывать обработку на то, что программа может быть запущена не с HDD а, например, с CD. Что приведет к ошибке, так как создать файл на CD программа не сможет. Вторым вариантом является сохранение данных в реестре. Тут уже есть масса приемуществ. Не будет никаких ошибок с записью, если файл запускается с CD и так далее.

Итак, будем сохранять настройки программы в реестре. Теперь нужно определиться с тем, что же программа должна сохранять. В качестве примера сделаем сохранение положения окна и его размеры.

Приступим. Создайте новый проект. Добавьте модуль Registry в секцию Uses. Объявите глобальную переменную:

Var Reg: TRegistry;

С ее помощю будем осуществлять доступ к реестру. Далее приступим к написанию процедуры сохранения (начнем именно с сохранения, так как загружать еще нечего):

procedure SaveSettings;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey('\SOFTWARE\TestProgram', true);

  Reg.WriteInteger('Left', Form1.Left);
  Reg.WriteInteger('Top', Form1.Top);
  Reg.WriteInteger('Width', Form1.Width);
  Reg.WriteInteger('Height', Form1.Height);

  Reg.Free;
end;

Разберем, что тут написано и почему именно так. Ну первая строчка "Reg:=TRegistry.Create" это создание переменной. Последняя - освобождение. Далее указываем одну из ветвей. OpenKey - открытие указаной ветви. True - означает, что если такой ветви не существует, то она будет создана. Если бы стоял False и открываемой ветви не существовало бы, то функция бы возвратила ошибку. WriteInteger - это запись ключа реестра. Первый параметр - его имя, второй - значение.

Осталось вызвать вышенаписаную процедуру. Создаем событие формы onFormClose. Оно произойдет при закрытии формы (не обязательно на кнопку закрыть). После создания вызываем процедуру. В будет так:

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

Далее запускаем программу изменяем положение и закрываем. Открываем редактор реестра и проверяем (для открытия делаем: Пуск -> Выполнить -> Regedit). Теперь нужно написать процедуру загрузки этих параметров:

procedure LoadSettings;
var Reg: TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey('\SOFTWARE\TestProgram', true);

  if reg.ValueExists('Left') then Form1.Left := Reg.ReadInteger('Left');
  if reg.ValueExists('Top') then Form1.Top := Reg.ReadInteger('Top');
  if reg.ValueExists('Width') then Form1.Width := Reg.ReadInteger('Width');
  if reg.ValueExists('Height') then Form1.Height := Reg.ReadInteger('Height');

  Reg.free;
end;

Тут все тоже самое, что при сохранении, но с некоторыми отличиями. ValueExists возвращает True если ключ с указанным именем в качестве параметра существует, иначе возвратит False. Это сделано для того, чтобы предотвратить ошибку если ключа не существует. Так как программа будет пытаться загрузить ключ которого нету.

Осталось только вызвать процедуру LoadSettings. Вызывать будем в событии формы onCreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadSettings;
end;

Запускаем программу и тестируем. Аналогично можно сохранять абсолютно любые настройки. Если нужно сохранить строку (например путь к чему-либо), то вместо WriteInteger используем WriteString, а вместо ReadInteger используем ReadString.

Просмотров: 15225

Обсудить на форуме

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта