TXMLPropStorage/pl
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
polski (pl) │
português (pt) │
русский (ru) │
TXMLPropStorage jest składnikiem służącym do zapisywania i przywracania wybranych właściwości (TForm lub dowolnej kontrolki). Działa z właściwością TForm.SessionProperties. Jest dostępny w zakładce Misc tab na palecie komponentów.
Użycie
- Upuść TXMLPropStorage na formularzu i ustaw nazwę pliku we właściwościach, na przykład: session.xml
- Wybierz formularz, przejdź do Inspektora obiektów i otwórz okno edytora dla właściwości SessionProperties w TForm.
- Dodaj tutaj właściwości formularza i/lub kontrolek, które mają być przechowywane w pliku session.xml (np.: szerokość; wysokość).
- Skompiluj aplikację.
Twoja aplikacja odczyta teraz wybraną wartość właściwości z session.xml i zastosuje ją w czasie wykonywania (np. Width, Height, Left, Top dla TForm).
Komponent TINIPropStorage działa tak samo jak TXMLPropStorage, z wyjątkiem tego, że przechowuje informacje o sesji w IniFile.
StoredValues property
TINIPropStorage and TXMLPropStorage have a StoredValues property which stores some value (it's useful to use no other config file).
Some properties (as CheckGroup.Item[n].Checked) cannot be saved in SessionProperties of TForm, you need to do this manually. It's useful to save other setting information too.
Let's write a simple demo:
- Run Lazarus and start a new application;
- Drop a TXMLPropStorage and TCheckGroup component;
- Add one item in TCheckGroup (Item Test);
- Click in XMLPropStorage1 and access StoredValues property editor;
- Add a new value with name = item0_checked and value = -1 (True = -1);
- In the OnRestoreProperties event add this code:
CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
- In the OnSavingProperties event add this code:
XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
- Run the demo program, change checked property of TCheckGroup.Items[n] and close form. Your changes was saved? :)
You can change Key property of StoredValues.Items[n] if you're saving some information confidential (it uses XOREncode and XORDecode functions of RTL on saving and restoring routines).
Notes
TXMLPropStorage has a default handler if you don't set a filename. Under Windows the settings will be saved in the application directory as PROGRAMNAME.xml.
Under Unix/Linux/macOS it will be saved in the home directory of the current user as .PROGRAMNAME
It is therefore a very good idea to leave the filename blank for unix programs meant to be run by normal users.
According to bug report 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."
See also