Difference between revisions of "TXMLPropStorage/ru"
(25 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
{{TXMLPropStorage}} | {{TXMLPropStorage}} | ||
− | + | [[File:KomponentenpaletteTXMLPropStorage.png]] | |
− | TXMLPropStorage - это компонент для | + | '''TXMLPropStorage''' [[image: txmlpropstorage.png]] - это компонент для сохранения и восстановления выбранных свойств (либо [[TForm/ru|TForm]], либо любого элемента управления на нем). Он работает со свойством <code>TForm.SessionProperties</code>. Он доступен на [[Misc_tab/ru|вкладке Разное]] в [[Component_Palette/ru|Палитре компонентов]]. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | == Использование == | |
+ | # Положите компонент [[doc:lcl/xmlpropstorage/txmlpropstorage.html|TXMLPropStorage]] на форму и установите свойство "filename" в, например, 'session.xml'. | ||
+ | # Выберите форму, зайдите в Инспектор Объектов и откройте окно редактора у свойства TForm.[[doc:lcl/forms/tform.sessionproperties.html|SessionProperties]]. | ||
+ | # Добавьте здесь свойства формы и/или элемента управлений, которые будут сохранены внутри session.xml (пример: width;height). | ||
+ | # Скомпилируйте приложение. | ||
− | + | Ваше приложение теперь будет читать выбранное значение свойства в session.xml и применять его во время выполнения (такие как Width, Height, Left, Top для TForm). | |
− | + | Компонент TINIPropStorage работает так же, как и TXMLPropStorage, но дополнительно хранит информацию о сеансе в [http://lazarus-ccr.sourceforge.net/docs/fcl/inifiles/index.html IniFile]. | |
− | TINIPropStorage | ||
− | + | == Свойство 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 добавьте этот код: | ||
+ | <syntaxhighlight lang=pascal> | ||
CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']); | CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']); | ||
− | </ | + | </syntaxhighlight> |
− | * | + | * В событие OnClose добавьте такой код: |
− | < | + | <syntaxhighlight lang=pascal> |
XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]); | XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]); | ||
− | </ | + | </syntaxhighlight> |
− | * | + | * Запустите демонстрашку, смените свойство TCheckGroup.Items[n] и закройте форму. Ваши изменения сохранились? :) |
+ | |||
+ | Вы можете изменить свойство "Key" у StoredValues.Items[n] если Вы сохраняете небольшое количество информации (используя функции XOREncode и XORDecode из RTL при сохранении и восстановлении). | ||
− | + | == Замечания == | |
+ | У TXMLPropStorage есть заданный по умолчанию обработчик, если Вы сами не задаёте имя файла. | ||
+ | Под Windows/MacOS значения сохраняются в каталоге приложения как "ИМЯ_ПРОГРАММЫ.xml". | ||
− | + | Под Unix-подобными системами настройки сохраняются в домашнем каталоге текущего пользователя под именем ".ИМЯ_ПРОГРАММЫ". | |
+ | Это очень хорошая идея, чтобы оставлять имя файла пустым для UNIX-программ, которые будут запускаться обычными пользователями. | ||
− | + | Согласно сообщению об ошибках [http://bugs.freepascal.org/view.php?id=13949 13949, 28856]: | |
− | + | #"Массив StoredValues[] может использоваться только в событиях OnRestoreProperties или OnSaveProperties. Вне этих событий значения сохранятся не будут", | |
+ | #"Если Вы хотите сохранить/загрузиться значения, которые не являются "published" свойствами компонента или элемента управления, Вы должны сохранять их в событии OnSaveProperties и загружать их используя событие OnRestoreProperties." | ||
− | + | == См.также == | |
− | + | * [[doc:lcl/xmlpropstorage/txmlpropstorage.html|TXMLPropStorage doc]] | |
+ | * [[doc:lcl/forms/tform.sessionproperties.html|SessionProperties doc]] | ||
+ | * [[Hardware Access]] | ||
− | + | {{LCL Components/ru}} | |
− | |||
− | |||
− |
Latest revision as of 15:26, 24 July 2021
│
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."
См.также