Sign in Join
Wiki copytemporary

TXMLPropStorage/de: what changed

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

Title: TXMLPropStorage/de

OldNewLine
1+## Einleitung
2+
3+TXMLPropStorage ist eine Komponente, um ausgewählte Eigenschaften zu speichern / wiederherzustellen (entweder von [[TForm/de|TForm]] oder jedem Bedienelement darauf). Sie arbeitet mit der TForm.[SessionProperties](http://lazarus-ccr.sourceforge.net/docs/lcl/controls/tcontrol.sessionproperties.html) Eigenschaft. Zu finden ist sie auf dem Tab **Misc** in der Komponentenpalette.
4+
5+![](/wiki-images/0/00/KomponentenpaletteTXMLPropStorage.png)
6+
7+## Verwendung
8+
9+1. Legen Sie eine [[doc:lcl/xmlpropstorage/txmlpropstorage.html|TXMLPropStorage]] Komponente auf dem Formular ab und setzen Sie die Eigenschaft Dateiname, zum Beispiel auf: session.xml
10+2. Öffnen Sie das Bearbeitungsfenster der [SessionProperties](http://lazarus-ccr.sourceforge.net/docs/lcl/controls/tcontrol.sessionproperties.html) Eigenschaft von TForm im Objektinspektor.
11+3. Fügen Sie hier Eigenschaften des Formulars und/oder Bedienelemente hinzu, die in session.xml gespeichert werden sollen.
12+4. Kompilieren Sie die Anwendung.
13+
14+Ihre Anwendung wird jetzt die ausgewählte Eigenschaft von session.xml lesen und zur Laufzeit anwenden (wie Width, Height, Left, Top für TForm).
15+
16+[[TINIPropStorage/de|TINIPropStorage]] funktioniert auf die selbe Weise wie TXMLPropStorage, ausgenommen dass die Sessioninformation in einer [INI-Datei](http://lazarus-ccr.sourceforge.net/docs/fcl/inifiles/index.html) gespeichert werden.
17+
18+## StoredValues Eigenschaft
19+
20+TINIPropStorage und TXMLPropStorage haben die Eigenschaft StoredValues, die einige Werte sichert (Es ist sinnvoll, keine andere Konfigurationsdateien zu benutzen).
21+
22+- Inwiefern ist das wirklich nützlich?
23+ 1. Einige Eigenschaften (wie 'CheckGroup.Item\[n\].Checked') können nicht in den SessionProperties von TForm gespeichert werden, das sollten Sie manuell tun. Es ist ebenso sinnvoll, einige andere Einstellungen zu speichern.
24+
25+Schreiben wir doch eine einfache Demo dazu:
26+
27+- Öffnen Sie Lazarus und starten Sie eine neue Anwendung.
28+- Legen Sie eine TXMLPropStorage und eine TCheckGroup Komponente auf dem Formular ab.
29+- Fügen Sie ein Element in TCheckGroup (Item Test) hinzu.
30+- Klicken Sie auf XMLPropStorage1 und öffnen Sie den StoredValues-Eigenschaftseditor.
31+- Fügen Sie einen neuen Eintrag an mit name = item0_checked und value = -1 (True = -1).
32+- Im Ereignis 'OnShow' fügen Sie hinzu:
33+
34+``` pascal
35+CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
36+```
37+
38+- Im Ereignis 'OnClose' fügen Sie hinzu:
39+
40+``` pascal
41+XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
42+```
43+
44+- Starten Sie das Demoprogramm, ändern Sie die Eigenschaft 'checked' von 'TCheckGroup.Items\[n\]' und schließen Sie das Formular. Wurden Ihre Änderungen gespeichert? :)
45+
46+Sie können die Eigenschaft *Key* von StoredValues.Items\[n\] ändern, wenn Sie vertrauliche Informationen speichern wollen. (Dabei werden die Funktionen XOREncode und XORDecode der RTL zum Speichern und Laden verwendet).
47+
48+## Property Storage auf Frames
49+
50+TXMLPropStorage funktioniert nur auf Formularen automatisch. Um es auf Frames einzusetzen, müssen einige Zeilen Code eingefügt werden.
51+
52+- Platzieren Sie das TXMLPropStorage auf dem Frame
53+- Sezten Sie die Eigenschaft `RootNodePath` auf z.B. `TApplication/Frame1`. Andernfalls findet TXMLPropStorage die gespeicherten Daten beim Laden nicht wieder. Wenn Sie das Frame mehrfach verwenden und unterschiedliche Werte speichern wollen, setzen Sie diese Eigenschaft für jede Verwendung unterschiedlich.
54+- Setzen Sie die Eigenschaft `SessionProperties` des Frames im Konstruktor.
55+- Rufen Sie `Restore` im Konstructor und `Save` im Destructor des Frames auf.
56+
57+``` pascal
58+constructor TFrame1.Create(TheOwner: TComponent);
59+begin
60+ inherited Create(TheOwner);
61+ SessionProperties := 'Panel1.Width;Panel3.Width';
62+ XMLPropStorage1.RootNodePath := 'TApplication/Frame1'; // wenn das Frame mehrfach verwendent wird und die Einstellungen nicht identisch sein sollen, setzen Sie hier für jede Instanz einen eigenen Namen
63+ XMLPropStorage1.Restore;
64+end;
65+
66+destructor TFrame1.Destroy;
67+begin
68+ XMLPropStorage1.Save;
69+ inherited Destroy;
70+end;
71+```
72+
73+## Anmerkungen
74+
75+TXMLPropStorage hat einen Vorgabe-Handler, wenn Sie keinen Dateinamen festlegen. Unter Windows werden die Einstellungen im Anwendungsverzeichnis als PROGRAMNAME.xml gespeichert.
76+
77+Unter Unix/Linux/macOS werden sie im Home-Verzeichnis des aktuellen Benutzers als .PROGRAMNAME gespeichert.
78+
79+Es ist daher eine gute Idee, den Dateinamen für Unix-Programme leer zu lassen, die durch normale Benutzer gestartet zu werden.
80+
81+Ein Fehlerbericht [13949, note 28856](http://bugs.freepascal.org/view.php?id=13949) bemerkt: "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."
82+
83+## Siehe auch
84+
85+[[Hardware Access]]
86+
87+---
88+*From the Free Pascal wiki, page "TXMLPropStorage/de", as it stood on 2022-04-20 after a change by Socke, 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).*
89+Category: Components/de
90+Category: LCL/de

Back to history