уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В последнее время приходится довольно много времени проводить в Lazarus’е. Пишем втроем большой программный комплекс для экологов с базой данных, кучей расчётных модулей, импортом/экспортом документов и т.д. В общем работа кипит. Естественно проект рассчитан на работу в разных операционных системах (пока компилируем под Win32 и Linux).
Несмотря на то, что большинство компонентов и модулей в Lazarus соответствуют по своим функциям одноименным компонентам и модулям в Delphi, иногда попадаются и довольно интересные новые решения, которые почему-то не нашли реализации ни у Borland, ни у CodeGear и даже у Embarcadero. Хотя зря.
Вот, например, работа с индивидуальными настройками приложения. Помнится был в блоге пост от Серёги где он разрабатывал компонент для работы с опциями. Довольно актуальная тема для программистов. Компонент позволяет значительно экономить время при разработке, не приходится лишний раз заморачиваться над работой с реестром или Ini-файлами и т.д. Почему это не было реализовано теми же разработчиками Delphi? Остается только гадать. А вот, что предлагают нам разработчики Lazarus’а.

1. Компоненты для сохранения индивидуальных настроек INIPropStorage и XMLPropStorage.

Компоненты предназначены для сохранения и восстановления индивидуальных настроек объектов (это может быть TForm или любой другой контрол на форме).
Как понятно из названия самих компонентов, первый хранит настройки в INI-файлах, второй — в XML. Работают они абсолютно идентично — всё зависит от Ваших предпочтений и потребностей. Например, мы активно используем INIPropStorage.
Рассмотрим как можно воспользоваться компонентом. Например, для сохранения положения и размеров формы.
1. Создаем новый проект. И укладываем на форму компонент INIPropStorage и задаем ему свойство INIFileName, например options.ini.
2. Теперь выбираем в инспекторе объектов нашу форму и переходим к свойству SessionProperties. Перед Вами должен открыться редактор:

Properties

Выбираете в списке слева форму или любой другой контрол и справа появится список всех его свойств, доступных для хранения.
3. Выбираем необходимый свойства и жмем кнопку «Добавить»
4. Компилируем и запускаем проект.
Теперь все свойства, которые вы занесли в SessionProperties будут автоматически сохраняться в ini-файле.
Так, например, выглядит содержимое INI-файла с сохраненными свойствами Form1:

ini-properties

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

Свойство StoredValues

Иногда может потребоваться сохранение свойств, напрямую не имеющих отношения к какому-либо контролу. Например, свойство Checked у CheckBox’а может меняться в зависимости от выбора пользователем тех или иных свойств или ввода данных.
Для таких случаев можно хранить свойства отдельно в StoredValues. Рассмотрим работу со StoredValues на простом примере.
1. Укладываем на форму компонент CheckBox
2. Открываем у INIPropStorage редактор свойств StoredValues и добавляем новой свойство для хранения. Например, я задал следующие параметры: Name=»item0_checked», Value=»-1″
3. Пишем обработчики

procedure TForm1.FormShow(Sender: TObject);
begin
CheckBox1.Checked:=StrToBool(IniPropStorage1.StoredValue['item0_checked']);
end;

На OnClose формы:

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  INIPropStorage1.StoredValue['item0_checked']:= BoolToStr(CheckBox1.Checked);
end;

Теперь компилируем и запускаем проект. В запущенном приложении меняем состояние CheckBox’а и после закрытия форму его состояние автоматически запишется в StoredValues. Подобным образом можно хранить абсолютно любые данные в одном файле. Единственное, что приходится всегда учитывать — это то, что все хранимые свойства необходимо приводить к нужному виду.

Работа с INI-файлом напрямую

Если уж Вам не хватит функциональности компонента и потребуется читать/записывать данные в файл самостоятельно, то тут опять же не возникнет никаких сложностей. INIPropStorage может читать/записывать данные в файл напрямую из приложения. Для этого у компонента предусмотрены соответствующие методы Read/Write, которые работают точно также как и у простых объектов TINIFile с которыми Вы, надеюсь, достаточно знакомы по Delphi. Есть только одно изменение — перед записью необходимо отдельно указать секцию. Например так:

 with MainForm.IniPropStorage1 do
    begin
      IniSection:='LoginInfo'; //указываем секцию
      WriteBoolean('AutoLogin',CheckBox1.Checked);
      WriteString('Login',Edit4.Text);
      WriteString('Password',Edit5.Text);
      IniSection:='ConnectInfo'; //указываем секцию
      WriteString('IP',Edit1.Text);
      WriteString('DBName',Edit2.Text);
      WriteInteger('Port',StrToInt(Edit3.Text));
    end;

Аналогичным образом проводится и чтение данных.
Вот так запросто можно автоматически сохранять необходимые настройки приложения, отдельные данные, информацию о пользователе и т.д. Будем надеяться, что в будущем и у Delphi появятся такие же пусть и мелкие, но полезные компоненты.

3 6 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
7 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Михаил
28/11/2009 12:48

Вот зрелое решение для Delphi: http://deepsoftware.ru/rsllib/overview.html

Torbins
Torbins
17/01/2010 17:29

Абсолютно аналогичная штуковина есть в JVCL. Я даже подозреваю, что именно оттуда она перекочевала в Lazarus.

trackback
Lazarus. Сохранение настроек программы в ini/xml файлы. // Азбука Софта
27/03/2012 12:41

[…] поэтому вот ссылки на источники в интернете: http://www.webdelphi.ru http://www.freepascal.ru Теги ini, lazarus, windows Категория Новости, […]

Андрей
30/06/2012 11:38

Жаль, что TreeView не умеет сохранять :(