Difference between revisions of "TXMLPropStorage/ru"

From Lazarus wiki
Jump to navigationJump to search
Line 41: Line 41:
  
 
== Замечания ==
 
== Замечания ==
 +
У TXMLPropStorage есть заданный по умолчанию обработчик, если Вы сами не задаёте имя файла.
 +
Под Windows/MacOS значения сохраняются в каталоге приложения как "ИМЯ_ПРОГРАММЫ.xml".
  
TXMLPropStorage has a default handler if you don't set a filename.
+
Под Unix-подобными системами настройки сохраняются в домашнем каталоге текущего пользователя под именем ".ИМЯ_ПРОГРАММЫ".
Under Windows/MacOS the settings will be saved in the application directory as PROGRAMNAME.xml.
+
Это очень хорошая идея, чтобы оставлять имя файла пустым для UNIX-программ, которые будут запускаться обычными пользователями.
  
Under Unix likes it will be saved in the home directory of the current user as .PROGRAMNAME
+
Согласно сообщению об ошибках [http://bugs.freepascal.org/view.php?id=13949 13949, 28856]:  
 
+
#"Массив StoredValues[] может использоваться только в событиях OnRestoreProperties или OnSaveProperties. Вне этих событий значения сохранятся не будут",  
It is therefore a very good idea to leave the filename blank for unix programs meant to be run by normal users.
+
#"Если Вы хотите сохранить/загрузиться значения, которые не являются "published" свойствами компонента или элемента управления, Вы должны сохранять их в событии OnSaveProperties и загружать их используя событие OnRestoreProperties."----
 
 
According to bug report [http://bugs.freepascal.org/view.php?id=13949 13949, note 28856]: "The StoredValues[] array can only be used during the OnRestoreProperties or OnSaveProperties events. Outside these events, the values will not be stored." and "If you want to save/load values that are not published properties of a component or control, you should save them in a OnSaveProperties event, and
 
load them using the OnRestoreProperties event."
 
----
 
 
[[Hardware Access]]
 
[[Hardware Access]]

Revision as of 03:35, 22 April 2010

Deutsch (de) English (en) español (es) français (fr) polski (pl) português (pt) русский (ru)

Введение

TXMLPropStorage - это компонент для того, чтобы сохранять и восстанавливать выбранные свойства (TForm или любого элемента управление на нем). Это работает совместно со свойством TForm.SessionProperties. Оно доступно на вкладке "Misc" палитры компонентов.

Использование

  1. Положите компонент TXMLPropStorage на форму и установите свойство "filename" в, например, 'session.xml'.
  2. Выберите форму, зайдите в Инспектор Объектов и откройте окно редактора у свойства TForm.SessionProperties.
  3. Добавьте здесь свойства формы и/или элемента управлений, которые будут сохранены внутри session.xml (пример: width;height).
  4. Скомпилируйте приложение.

Ваше приложение теперь будет читать выбранное значение свойства в 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 редактор;
  • Добавить новое значение с именем = item0_checked и value = -1 (True = -1);
  • В событие OnShow добавьте этот код:

<delphi> CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']); </delphi>

  • В событие OnClose добавьте такой код:

<delphi> XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]); </delphi>

  • Запустите демонстрашку, смените свойство TCheckGroup.Items[n] и закройте форму. Ваши изменения сохранились? :)

Вы можете изменить свойство "Key" у StoredValues.Items[n] если Вы сохраняете небольшое количество информации (используя функции XOREncode и XORDecode из RTL при сохранении и восстановлении).

Замечания

У TXMLPropStorage есть заданный по умолчанию обработчик, если Вы сами не задаёте имя файла. Под Windows/MacOS значения сохраняются в каталоге приложения как "ИМЯ_ПРОГРАММЫ.xml".

Под Unix-подобными системами настройки сохраняются в домашнем каталоге текущего пользователя под именем ".ИМЯ_ПРОГРАММЫ". Это очень хорошая идея, чтобы оставлять имя файла пустым для UNIX-программ, которые будут запускаться обычными пользователями.

Согласно сообщению об ошибках 13949, 28856:

  1. "Массив StoredValues[] может использоваться только в событиях OnRestoreProperties или OnSaveProperties. Вне этих событий значения сохранятся не будут",
  2. "Если Вы хотите сохранить/загрузиться значения, которые не являются "published" свойствами компонента или элемента управления, Вы должны сохранять их в событии OnSaveProperties и загружать их используя событие OnRestoreProperties."----

Hardware Access