Catalog · How the catalog works
Form-Data-XML-Store-Helper
A simple form data store to xml helper for Delphi
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
A simple form data to xml store helper for Delphi.
Copyright (C) 2018-2024 by Alexey Kolesnikov.
Email: ak@blu-disc.net
Website: https://blu-disc.net
You can use this software for whatever you want.
Usage:
Create, add property names for storing, call Save/Load.
Optionally you can make some actions before restoring (OnLoad event called after xml loaded, before restoring)
and before saving (OnSave event called after xml created, before saving). Both methods give you the form root node.
Property name can be:
- Simple property name, like ItemIndex, Checked, Value, Text, etc.
- ControlName|Property, like ComboBox1|Text
- ClassName.Property, like TMemo.Lines
You can store properties using three groups:
- Required group: stores property always if found.
- Custom group: stores the property by calling the specified procedure (TFormDataXmlStorePropProc).
- Optional group: stores this property only if nothing has been found in the Required and Custom lists for this control.
Example of usage:
XmlStore := TFormDataXmlStore.Create(aForm);
XmlStore.OnLoad := XmlStore_OnLoad; // optional
XmlStore.OnSave := XmlStore_OnSave; // optional
XmlStore.AddPropertyRequired('Checked'); // will store Checked for all controls that have it
XmlStore.AddPropertyRequired('ItemIndex'); // will store ItemIndex for all controls that have it
XmlStore.AddPropertyRequired('cmbProjectLangCode|Text'); // will store Text for cmbProjectLangCode
XmlStore.AddPropertyCustom('TMemo.Lines', XmlStoreMemoLines); // will store Lines for all TMemo using XmlStoreMemoLines procedure
XmlStore.AddPropertyOptional('Text'); // will store Text for all controls that have it, and does not have anything from other lists
...
XmlStore.Save(FileName);
...
XmlStore.Load(FileName);
...
procedure XmlStoreMemoLines(Control: TControl; Node: IXMLNode; XmlStoreCommand: TFormDataXmlStoreCommand);
begin
if XmlStoreCommand = apcSave then
Node.AddChild('Lines').NodeValue := TMemo(Control).Lines.Text
else
TMemo(Control).Lines.Text := VarToStr(Node.ChildNodes['Lines'].NodeValue);
end;
...
procedure TfrmWizard.XmlStore_OnLoad(RootNode: IXMLNode);
begin
if RootNode.HasAttribute('ProjectFolder') then
ProjectFolder := RootNode.Attributes['ProjectFolder'];
end;
procedure TfrmWizard.XmlStore_OnSave(RootNode: IXMLNode);
begin
RootNode.Attributes['ProjectFolder'] := ProjectFolder;
end;
