Подписка

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

Наши проекты

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
Опубликовал SeregaAltmer 23 августа 2010 в 08:03.
Категории: Компоненты Delphi.


TOptions 1.6 Компонет Delphi для работы с опциями Уже знакомый многим компонент TOptions, доведен мною до логически понятного, визуально приятного и человеко удобного вида. Напомню, TOptions - компонент, организующий хранение опций в .ini-файлах и реестре, максимально простым и удобным образом.

Признаться я поначалу думал выложить обновление в старый пост "Компонент Delphi 2010 для работы с Опциями", все-таки разница между цифрами 1.3 и 1.6 в версии не большая. Но перечитав описание этого самого 1.3, понял что очень многое в том описании не соответствует сегодняшней версии. И надо сказать меня это радует. Ведь компонент стал гораздо удобнее, а значит и полезнее.

Для начала опишу принципы работы с новой версией, на простеньком примере. Что-бы, так сказать, познакомить с возможностями компонента.

Этап 1. Готовимся к работе. [Инспектор объектов - свойсва].

Создаем проект, ставим компонент TOptions на форму :) (инструкция по установке компонента находится в конце поста). Идем настраивать компонент в ObjectInspector, попутно изучим доступные в нем свойства .Object Inspector TOptions 1.6 Delphi компонет для работы с опциями

AutoApply - отвечает за моментальное "вступление в силу" изменившихся опций. Если имеет значение False то изменения применятся только при вызове метода Apply компонента, или конкретной опции. Если True, все изменения вступают в силу сразуже. Ставим ее в положении True, это позволит нам обойтись без кнопки применить.

AutoSave - не позволит программе потерять последние настройки при "неправильном завершении" работы, если конечно значение свойства равно True. Значение True заставляет компонент сохранять опции каждый раз после вызова метода Apply вручную, или автоматом при свойстве AutoApply равным True. Тоже ставим значение True. Можно конечно написать обработчик с вызовом метода SaveAllOptions, но думаю удобнее будет обойтись без него :).

FileName - путь к файлу в котором будут храниться опции. Должен содержать абсолютный путь к любому файлу, доступному на чтение и запись. Если указанный файл не существует, компонент создаст его при первой попытке сохранить опции. Если же и каталог не существует, TOptions не станет пытаться его создать, а просто создаст файл в директории по умолчанию "%appdir%\Options.ini". Свойству можно задавать как обычный путь "C:\dir\opt.ini", так и с использованием системных переменных, таких как "%windir%", "%programfiles%" и так далее. Только переменная "%appdir%" не является системной, а реализуется самим компонентам, она возвращает путь к вашей программе. Это свойство мы тоже оставляем как есть, пусть файл с опциями лежит там-же где и наш проект.

Items - Свойство типа TOptionList содержит в себе все опции нашего компонента. В инспекторе объектов вызывает редактор опций, о нем отдельно ниже. Пока не трогаем.

Place - Определяет место хранения опций, может принимать одно из следующих значений:

  • poIniFile - опции будут храниться в файле указанном в свойстве FileName;
  • poRegistry - опции храняться в реестре в ветке указанной в свойстве Reg;
  • poNone - опции не будут храниться нигде, по сути совершенно не нужное значение, не используйте его. Когда-нибудь я его обязательно удалю. опции будут хранится только в самом компоненте. Каждый раз при загрузке программы выдаются опции по умолчанию (передумал удалять, потенциал значения poNone оказался гораздо значительней чем я предполагал).

Значение Place оставляем как есть, пусть опции хранятся в файле.

Reg.Key - содержит ключ реестра для хранения опций.

Reg.RootKey - содержит корневой ключ реестра. И эти два свойства тоже оставляем как есть, мы ведь будем пользоваться в примере .ini-файлом а не реестром :).

option1 TOptions 1.6 Delphi компонет для работы с опциямиЭтам 2. Создаем  контролы.

Размещаем на форме контрол, для редактирования значений нашей первой опции, пусть это будет TLabeledEdit а опция будет называться "заголовок программы". Само собой у этой опции будет свое предназначение, она будет менять свойство Caption у формы. Задаем обработчик события OnChange для нашего контрола:

procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
  Options1['заголовок'].Value := LabeledEdit1.Text;
end;

И все, правда просто? :). Это и на самом деле все, но только для обработчика контрола, больше нам от него ничего не понадобится, так-что двигаемся дальше.

Изменять значение опции наш LabeledEdit1 мы научили, теперь нам необходимо обеспечить, наличие этой самой опции в компоненте Options1. Иначе подобный вызов (Options1['заголовок'].Value) приведет к ошибке.

Этап 3. Обратная связь. [Редактор опций].

Щелкаем мышкой пару раз по компоненту, или жмем многоточие на свойстве Items в инспекторе объектов.editor option1 TOptions 1.6 Delphi компонет для работы с опциями

Жмем по кнопке [Добавить] в разделе "Секции", на запрос ввода имени вводим его, или оставляем как есть и жмем [Ok]. Убеждаемся что наша новая секция выделена, и жмем [Добавить] в разделе "Опции" (справа). В результате появиться "Новая опция". Выделяем ее, и в разделе "Параметры выбранной опции", задаем значения как на рисунке выше. Особое внимание уделяем идентификатору опции, через него мы будем обращаться к опции в программе. Идентификатор чувствителен к регистру! Нажимаем [Применить]. Опция готова к употреблению :).

Этап 4. Обработка. [Инспектор объектов - события].

Значение любой опции хранимой TOptions можно легко получить в любом месте программы, с помощью свойства Value, строкой наподобие "Options1['option'].Value". Но во избежание путаницы и для максимальной оптимизации/автоматизации, работы с опциями, настоятельно рекомендую использовать обработчики событий. Благо их достаточное количество, на разные "случаи жизни" :). Inspector Events TOptions 1.6 Delphi компонет для работы с опциями

OnLoaded - загрузка завершена. Событие возникает после того как отработает метод LoadAllOptions. Наиболее вероятная область применения - при запуске программы. В этом примере мы ее не будем использовать.

OnModified - произошли изменения. Всякий раз когда мы переопределяем значение свойств, или отменяем их изменения, вызывается это событие. Событие содержит булеву переменную Modified которая равна True если есть опции значения которых были переопределены но не применены, и False если нет ни одной не примененной опции (такое может возникнуть при вызове метода Reset или ResetToDefault). Наиболее вероятная область применения - управление кнопками принятия и отмены изменений. Тоже не используем, нет пока у нас таких кнопок.

OnOptionApply -  у опции был вызван метод Apply и она приняла новое значение. Здесь описываем влияние опций на нашу программу. Для взаимодействия с опцией вызвавшей события обработчику передается переменная CurrentOption. Напишем обработчик для нашей програмки.

procedure TForm1.Options1OptionApply(Sender: TObject; CurrentOption: TOption);
begin
  if CurrentOption.Ident = 'заголовок' then      //проверяем идентификатор опции
    Caption := CurrentOption.Value      //применяем значение опции к имени формы
end;

OnOptionLoad - Опция загружена. Была загружена одна, конкретная опция, ничего особенного в нашей програмке для этой опции не будет напишем простенький обработчик.

procedure TForm1.Options1OptionLoad(Sender: TObject; CurrentOption: TOption);
begin
  Options1OptionSet(Sender, CurrentOption);     //вызываем обработчик изменений
  Options1OptionApply(Sender, CurrentOption);    //вызываем обработчик применений :)
end;

OnOptionSet - Опцию изменили, но значение пока не приняли. Это событие для контролов настроек. Пишем обработчик.

procedure TForm1.Options1OptionSet(Sender: TObject; CurrentOption: TOption);
begin
  if CurrentOption.Ident = 'заголовок' then      //проверяем идентификатор опции
    LabeledEdit1.Text := CurrentOption.NewValue      //применяем НОВОЕ значение опции к контролу.
end;

Этап 5. Команда "На старт!". run TOptions 1.6 Delphi компонет для работы с опциями

Последний штрих в нашей не хитрой программке должен поставить метод LoadAllOptions, который запустит наш компонент в работу. Поставим его в обработчик OnCreate формы.

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

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

Всякие важности.

opt TOptions 1.6 Delphi компонет для работы с опциями

На данный момент компонент поддерживает 7 типов опций:

  • string - строка
  • Integer - целое число
  • Boolean - логическое значение
  • Float - дробное число
  • DateTime - дата и время
  • Color - цвет
  • ShortCut - "быстрые клавиши"

Для каждого типа опции используется свое поле ввода, что облегчает как восприятие так и работу с компонентом. Но от типа опции зависит не только это поле ввода. Тип напрямую влияет на приведение опции в коде. Например, если у опции установлен тип  ShortCut, а вы пытаетесь присвоить ей числовое значение "Options1['short'].Value := 1234", это вызовет ошибку. НО вызовет ее уже во время работы программы! В силу особенности свойства Value,  компилятор таких ошибок просто не увидит, и позволит вам запустить программу. Поэтому будте внимательны к соответствию типов. Это незначительная "плата" за столь удобную форму записи.

editor options TOptions 1.6 Delphi компонет для работы с опциями

На верхней панели редактора находятся 3 переключателя для следующих опций:

  • Дополнительные панели - отображает панели редактирования списка секций и списка опций. Все функции доступные на этих панелях, можно найти в контекстном меню нужного списка. Используйте то что вам удобнее.
  • Без вопросов - отключает запросы на подверждение удаления секций и опций.
  • Автоприменение опций - включает автоматическое применение опций при их добавлении и изменении, кнопка применить при этом не отображается. Значения опций применяются "на лету".

Кроме того в редакторе есть скрытые опции, которые вы настраиваете не заметно для себя. Это положение и размеры окна редактора. Все опции редактора хранятся в реестре, в ветке "HKCU\softvare\BuBa\TPropertyEditor". При деинсталяции компонента эта ветка не чистится! Поэтому, если вдруг так получится, что вы решите удалить компонент, почистите эту ветку самостоятельно.

Интересный момент относительно опций. Опции редактора организованы посредством компонента TOptions, при помощью самого редактора. Так вот, редактор опций умеет редактировать не только чужие опции, но и свои собственные. Очень самостоятельный получился  :).

Каждый элемент в редакторе снабжен подсказкой, отображаемой на панели статуса, так что заблудится или забыть о назначении какого либо из них вам не дадут :).

Если потребуется распишу поширше, задавайте вопросы если что-то не получается, или просто не понятно. Да и если баги, глюки наковыряете пишите обязательно :).

Огромное Спасибо всем кто пользуется TOptions!

Вышла новая версия! Информация и ссылка на скачку тут:

TOptions v.1.7. Очердная версия “опционального” компонента :)

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

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

WP_Cloudy
  • SeregaAltmer пишет:

    Будет версия 1.7. Еще лучше. Может даже еще полезней. :)
    Обновление впервую очередь коснется exception-ов (но не только).

    Оставляйте коменты о любых найденных ошибках, о каждом не найденном плюсе.
    Я обязательно исправлю все эти недостатки!

    Как скоро будет обновление сказать пока не могу, так-что ставьте пока 1.6 он тоже хорош :)
    Тем кто установил (установит 1.6) не будет необходимости переустанавливать компонент. Достаточно будет заменить файлы.

  • Zaslav пишет:

    А для других версий Delphi нет?

  • SeregaAltmer пишет:

    Честно признаюсь — не тестил.
    Может и заработает, но врядли.

  • DmitryKz aka Loriem пишет:

    Насчет корректности работы не могу сказать, не тестил, но компилится и ставится в среду, отличную от 2010.
    По примеру 2006, на которой сижу, в требуемых пакетах может потребоваться заменить vclimg на vcljpg, и поправить dfm-файл. Удалить свойство ColorDepth у ImageList1.

  • SeregaAltmer пишет:

    Значит в 1.7 избавлюсь от ImageList1, его использование в принципе не критично.

    В 1.7 уже сделал выбор контрола для управления опцией. Это избавляет пожалуй от половины обработчиков. Еще много чего хочу доработать поэтому выложу не раньше выходных, скорее всего даже попозже.
    Жду советы, вопросы, впечатления по 1.6 :).

  • Meriados пишет:

    Спасибо, полезный компонент. Сам чем то подобным, но своим и не универсальным, пользуюсь. Интересно будет понаблюдать за развитием компонента :)

  • SeregaAltmer пишет:

    Спасибо за спасибо :)
    Постараюсь не затягивать с обновлениями.

  • WildFrag пишет:

    С микроскопическими поправками встал на D7
    Главное при компиляции пакета, переоткройте форму свойств чтобы доп. свойства контролов из D2010 убрать и тогда все будет отлично.

  • SeregaAltmer пишет:

    Вечером выложу обновление!

  • Lex пишет:

    Здравствуйте!
    Некоторое время назад решил использовать этот компонент. Так как юзаю Delphy 6, поставил версию 1.6. Все вроде работало ок, но недавно появились проблемы:
    1. Исчезают все опции из списка, кроме вводившейся первой 
    2. Первая самостоятельно меняет тип. В моем случае с Integer на DateTime.
    Подскажите чем полечить? Версии свежее в шестерку не могу поставить.
    Спасибо. 

Ваш ответ

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

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