Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 27 ноября 2009 в 21:47.
Категории: Компоненты Delphi, Моя работа.


В последнее время приходится довольно много времени проводить в 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 появяться такие же пусть и мелкие, но полезные компоненты.

Мой блог находят по следующим фразам

---------------
Нашел в Сети довольно интересный новый проект для блоггеров Bloggers.su - форум блоггеров. Всем советую зарегистрироваться в проекте - очень многообещающий проект, а ворум - только одна из составных частей.
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (4)

WP_Cloudy
  • Михаил пишет:

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

  • Vlad пишет:

    Мдя, штука хорошая…ток за бабло :) Да и, в принципе, мне сейчас особо не пригодится, т.к. пахать приходится на два фронта: Linux и Windows. В целом INIPropStorage легко и не принужденно хранит сразу наборы свойств, например у меня сейчас в одной программе сохраняются в INI настройки столбцов DBGrid’а :) Выглядит страшновато, но работает «на ура»

  • Torbins пишет:

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

  • Vlad пишет:

    Скорее наоборот :) в Lazarus эти компоненты уже давненько есть, практически с самого начала, судя по описанию.

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник

   


разлочка iphone