TXMLPropStorage/de

From Free Pascal wiki
Jump to navigationJump to search

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

Einleitung

TXMLPropStorage ist eine Komponente, um ausgewählte Eigenschaften zu speichern / wiederherzustellen (entweder von TForm oder jedem Bedienelement darauf). Sie arbeitet mit der TForm.SessionProperties Eigenschaft. Zu finden ist sie auf dem Tab Misc in der Komponentenpalette.

KomponentenpaletteTXMLPropStorage.png

Verwendung

  1. Legen Sie eine TXMLPropStorage Komponente auf dem Formular ab und setzen Sie die Eigenschaft Dateiname, zum Beispiel auf: session.xml
  2. Öffnen Sie das Bearbeitungsfenster der SessionProperties Eigenschaft von TForm im Objektinspektor.
  3. Fügen Sie hier Eigenschaften des Formulars und/oder Bedienelemente hinzu, die in session.xml gespeichert werden sollen.
  4. Kompilieren Sie die Anwendung.

Ihre Anwendung wird jetzt die ausgewählte Eigenschaft von session.xml lesen und zur Laufzeit anwenden (wie Width, Height, Left, Top für TForm).

TINIPropStorage funktioniert auf die selbe Weise wie TXMLPropStorage, ausgenommen dass die Sessioninformation in einer INI-Datei gespeichert werden.

StoredValues Eigenschaft

TINIPropStorage und TXMLPropStorage haben die Eigenschaft StoredValues, die einige Werte sichert (Es ist sinnvoll, keine andere Konfigurationsdateien zu benutzen).

  • Inwiefern ist das wirklich nützlich?
    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.

Schreiben wir doch eine einfache Demo dazu:

  • Öffnen Sie Lazarus und starten Sie eine neue Anwendung.
  • Legen Sie eine TXMLPropStorage und eine TCheckGroup Komponente auf dem Formular ab.
  • Fügen Sie ein Element in TCheckGroup (Item Test) hinzu.
  • Klicken Sie auf XMLPropStorage1 und öffnen Sie den StoredValues-Eigenschaftseditor.
  • Fügen Sie einen neuen Eintrag an mit name = item0_checked und value = -1 (True = -1).
  • Im Ereignis 'OnShow' fügen Sie hinzu:
CheckGroup1.Checked[0] := StrToBool(XMLPropStorage1.StoredValue['item0_checked']);
  • Im Ereignis 'OnClose' fügen Sie hinzu:
XMLPropStorage1.StoredValue['item0_checked'] := BoolToStr(CheckGroup1.Checked[0]);
  • Starten Sie das Demoprogramm, ändern Sie die Eigenschaft 'checked' von 'TCheckGroup.Items[n]' und schließen Sie das Formular. Wurden Ihre Änderungen gespeichert? :)

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).

Property Storage auf Frames

TXMLPropStorage funktioniert nur auf Formularen automatisch. Um es auf Frames einzusetzen, müssen einige Zeilen Code eingefügt werden.

  • Platzieren Sie das TXMLPropStorage auf dem Frame
  • 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.
  • Setzen Sie die Eigenschaft SessionProperties des Frames im Konstruktor.
  • Rufen Sie Restore im Konstructor und Save im Destructor des Frames auf.
constructor TFrame1.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  SessionProperties := 'Panel1.Width;Panel3.Width';
  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
  XMLPropStorage1.Restore;
end;

destructor TFrame1.Destroy;
begin
  XMLPropStorage1.Save;
  inherited Destroy;
end;

Anmerkungen

TXMLPropStorage hat einen Vorgabe-Handler, wenn Sie keinen Dateinamen festlegen. Unter Windows werden die Einstellungen im Anwendungsverzeichnis als PROGRAMNAME.xml gespeichert.

Unter Unix/Linux/macOS werden sie im Home-Verzeichnis des aktuellen Benutzers als .PROGRAMNAME gespeichert.

Es ist daher eine gute Idee, den Dateinamen für Unix-Programme leer zu lassen, die durch normale Benutzer gestartet zu werden.

Ein Fehlerbericht 13949, note 28856 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."

Siehe auch

Hardware Access



Gehe zurück zu: LCL Components  — Komponente zuvor: TFilterComboBox Nächste Komponente: TINIPropStorage/de
LCL Komponenten
Komponenten Tab Komponenten
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedBtn • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TXMLConfig • TEventLog • TServiceManager
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TCalcEdit • TFileListBox • TFilterComboBox • TXMLPropStorage • TINIPropStorage • TBarChart • TButtonPanel • TShellTreeView • TShellListView • TIDEDialogLayoutStorage
Data Access TDatasource • TBufDataset • TMemDataset • TSdfDataset • TFixedFormatDataSet • TDbf
SynEdit TSynEdit • TSynMemo • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TsynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
LazControls TDividerBevel • TExtendedNotebook • TListFilterEdit • TTreeFilterEdit
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
IPro TIpFileDataProvider • TIpHtmlPanel
Chart TChart • TListChartSource TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection •TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader