Sign in Join
Wiki copytemporary

TXMLPropStorage/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TXMLPropStorage/ru

OldNewLine
1+![](/wiki-images/0/00/KomponentenpaletteTXMLPropStorage.png)
2+
3+**TXMLPropStorage** ![](/wiki-images/b/bf/Txmlpropstorage.png) - это компонент для сохранения и восстановления выбранных свойств (либо [[TForm/ru|TForm]], либо любого элемента управления на нем). Он работает со свойством `TForm.SessionProperties`. Он доступен на [[Misc tab/ru|вкладке Разное]] в [[Component Palette/ru|Палитре компонентов]].
4+
5+## Использование
6+
7+1. Положите компонент [[doc:lcl/xmlpropstorage/txmlpropstorage.html|TXMLPropStorage]] на форму и установите свойство "filename" в, например, 'session.xml'.
8+2. Выберите форму, зайдите в Инспектор Объектов и откройте окно редактора у свойства TForm.[[doc:lcl/forms/tform.sessionproperties.html|SessionProperties]].
9+3. Добавьте здесь свойства формы и/или элемента управлений, которые будут сохранены внутри session.xml (пример: width;height).
10+4. Скомпилируйте приложение.
11+
12+Ваше приложение теперь будет читать выбранное значение свойства в session.xml и применять его во время выполнения (такие как Width, Height, Left, Top для TForm).
13+
14+Компонент TINIPropStorage работает так же, как и TXMLPropStorage, но дополнительно хранит информацию о сеансе в [IniFile](http://lazarus-ccr.sourceforge.net/docs/fcl/inifiles/index.html).
15+
16+## Свойство StoredValues
17+
18+У [[TINIPropStorage]] и TXMLPropStorage есть свойство *StoredValues*, которое сохраняет некоторые значения (это бывает полезно, если вы не хотите использовать файлы конфигурации).
19+
20+Где это свойство может быть реально полезно?
21+
22+- Некоторые свойства (такие как CheckGroup.Item\[n\].Checked), не могут быть сохранены в TForm.SessionProperties и тогда Вы должны сделать это вручную. Полезно сохранить и другую информацию о параметрах настройки.
23+
24+Давайте напишем простую демонстрашку:
25+
26+- Запустите Lazarus и создайте новое приложение;
27+- Положите на форму компоненты TXMLPropStorage и TCheckGroup;
28+- Добавьте одну строку в TCheckGroup (Test);
29+- Кликните по XMLPropStorage1 и откройте в свойстве StoredValues редактор;
30+- Добавить новое значение, установите его имя(name) = item0_checked и value = -1 (True = -1);
31+- В событие OnShow добавьте этот код:
32+
33+``` pascal
34+CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
35+```
36+
37+- В событие OnClose добавьте такой код:
38+
39+``` pascal
40+XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
41+```
42+
43+- Запустите демонстрашку, смените свойство TCheckGroup.Items\[n\] и закройте форму. Ваши изменения сохранились? :)
44+
45+Вы можете изменить свойство "Key" у StoredValues.Items\[n\] если Вы сохраняете небольшое количество информации (используя функции XOREncode и XORDecode из RTL при сохранении и восстановлении).
46+
47+## Замечания
48+
49+У TXMLPropStorage есть заданный по умолчанию обработчик, если Вы сами не задаёте имя файла. Под Windows/MacOS значения сохраняются в каталоге приложения как "ИМЯ_ПРОГРАММЫ.xml".
50+
51+Под Unix-подобными системами настройки сохраняются в домашнем каталоге текущего пользователя под именем ".ИМЯ_ПРОГРАММЫ". Это очень хорошая идея, чтобы оставлять имя файла пустым для UNIX-программ, которые будут запускаться обычными пользователями.
52+
53+Согласно сообщению об ошибках [13949, 28856](http://bugs.freepascal.org/view.php?id=13949):
54+
55+1. "Массив StoredValues\[\] может использоваться только в событиях OnRestoreProperties или OnSaveProperties. Вне этих событий значения сохранятся не будут",
56+2. "Если Вы хотите сохранить/загрузиться значения, которые не являются "published" свойствами компонента или элемента управления, Вы должны сохранять их в событии OnSaveProperties и загружать их используя событие OnRestoreProperties."
57+
58+## См.также
59+
60+- [[doc:lcl/xmlpropstorage/txmlpropstorage.html|TXMLPropStorage doc]]
61+- [[doc:lcl/forms/tform.sessionproperties.html|SessionProperties doc]]
62+- [[Hardware Access]]
63+
64+---
65+*From the Free Pascal wiki, page "TXMLPropStorage/ru", as it stood on 2021-07-24 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history