TXMLPropStorage/de: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TXMLPropStorage/de
| Old | New | Line | |
|---|---|---|---|
| 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 | + |  | |
| 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 |
