TXMLPropStorage/ru
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
polski (pl) │
português (pt) │
русский (ru) │
TXMLPropStorage - это компонент для сохранения и восстановления выбранных свойств (либо TForm, либо любого элемента управления на нем). Он работает со свойством TForm.SessionProperties
. Он доступен на вкладке Разное в Палитре компонентов.
Использование
- Положите компонент TXMLPropStorage на форму и установите свойство "filename" в, например, 'session.xml'.
- Выберите форму, зайдите в Инспектор Объектов и откройте окно редактора у свойства TForm.SessionProperties.
- Добавьте здесь свойства формы и/или элемента управлений, которые будут сохранены внутри session.xml (пример: width;height).
- Скомпилируйте приложение.
Ваше приложение теперь будет читать выбранное значение свойства в session.xml и применять его во время выполнения (такие как Width, Height, Left, Top для TForm).
Компонент TINIPropStorage работает так же, как и TXMLPropStorage, но дополнительно хранит информацию о сеансе в IniFile.
Свойство StoredValues
У TINIPropStorage и TXMLPropStorage есть свойство StoredValues, которое сохраняет некоторые значения (это бывает полезно, если вы не хотите использовать файлы конфигурации).
Где это свойство может быть реально полезно?
- Некоторые свойства (такие как CheckGroup.Item[n].Checked), не могут быть сохранены в TForm.SessionProperties и тогда Вы должны сделать это вручную. Полезно сохранить и другую информацию о параметрах настройки.
Давайте напишем простую демонстрашку:
- Запустите Lazarus и создайте новое приложение;
- Положите на форму компоненты TXMLPropStorage и TCheckGroup;
- Добавьте одну строку в TCheckGroup (Test);
- Кликните по XMLPropStorage1 и откройте в свойстве StoredValues редактор;
- Добавить новое значение, установите его имя(name) = item0_checked и value = -1 (True = -1);
- В событие OnShow добавьте этот код:
CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
- В событие OnClose добавьте такой код:
XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
- Запустите демонстрашку, смените свойство TCheckGroup.Items[n] и закройте форму. Ваши изменения сохранились? :)
Вы можете изменить свойство "Key" у StoredValues.Items[n] если Вы сохраняете небольшое количество информации (используя функции XOREncode и XORDecode из RTL при сохранении и восстановлении).
Замечания
У TXMLPropStorage есть заданный по умолчанию обработчик, если Вы сами не задаёте имя файла. Под Windows/MacOS значения сохраняются в каталоге приложения как "ИМЯ_ПРОГРАММЫ.xml".
Под Unix-подобными системами настройки сохраняются в домашнем каталоге текущего пользователя под именем ".ИМЯ_ПРОГРАММЫ". Это очень хорошая идея, чтобы оставлять имя файла пустым для UNIX-программ, которые будут запускаться обычными пользователями.
Согласно сообщению об ошибках 13949, 28856:
- "Массив StoredValues[] может использоваться только в событиях OnRestoreProperties или OnSaveProperties. Вне этих событий значения сохранятся не будут",
- "Если Вы хотите сохранить/загрузиться значения, которые не являются "published" свойствами компонента или элемента управления, Вы должны сохранять их в событии OnSaveProperties и загружать их используя событие OnRestoreProperties."
См.также