📄 jvqappstorage.pas
字号:
{ Deletes all values and sub folders of the specified folder including the folder itself
(ignores sub stores). }
procedure DeleteSubTreeInt(const Path: string); virtual; abstract;
{ Retrieves the specified Integer value. If the value is not found, the Default will be
returned. If the value is not an Integer (or can't be converted to an Integer an EConvertError
exception will be raised. }
function DoReadInteger(const Path: string; Default: Integer): Integer; virtual; abstract;
{ Stores an Integer value. }
procedure DoWriteInteger(const Path: string; Value: Integer); virtual; abstract;
{ Retrieves the specified Extended value. If the value is not found, the Default will be
returned. If the value is not an Extended (or can't be converted to an Extended an
EConvertError exception will be raised.}
function DoReadFloat(const Path: string; Default: Extended): Extended; virtual; abstract;
{ Stores an Extended value. }
procedure DoWriteFloat(const Path: string; Value: Extended); virtual; abstract;
{ Retrieves the specified string value. If the value is not found, the Default will be
returned. If the value is not a string (or can't be converted to a string an EConvertError
exception will be raised. }
function DoReadString(const Path: string; const Default: string): string; virtual; abstract;
{ Stores an string value. }
procedure DoWriteString(const Path: string; const Value: string); virtual; abstract;
{ Retrieves the specified value into a buffer. The result holds the number of bytes actually
retrieved. }
function DoReadBinary(const Path: string; Buf: Pointer; BufSize: Integer): Integer; virtual; abstract;
{ Stores a buffer. }
procedure DoWriteBinary(const Path: string; Buf: Pointer; BufSize: Integer); virtual; abstract;
{ Retrieves the specified TDateTime value. If the value is not found, the Default will be
returned. If the value is not a TDateTime (or can't be converted to an TDateTime an
EConvertError exception will be raised. }
function DoReadDateTime(const Path: string; Default: TDateTime): TDateTime; virtual;
{ Stores a TDateTime value (ignores sub stores). }
procedure DoWriteDateTime(const Path: string; Value: TDateTime); virtual;
{ Retrieves the specified Boolean value. If the value is not found, the Default will be
returned. If the value is not a Boolean (or can't be converted to an Boolean an
EConvertError exception will be raised. }
function DoReadBoolean(const Path: string; Default: Boolean): Boolean; virtual;
{ Stores a Boolean value. }
procedure DoWriteBoolean(const Path: string; Value: Boolean); virtual;
{ Retrieves the specified Integer value. If the value is not found, the Default will be
returned. If the value is not an Integer (or can't be converted to an Integer an EConvertError
exception will be raised. }
function ReadIntegerInt(const Path: string; Default: Integer): Integer; virtual;
{ Stores an Integer value (ignores sub stores). }
procedure WriteIntegerInt(const Path: string; Value: Integer); virtual;
{ Retrieves the specified Extended value. If the value is not found, the Default will be
returned. If the value is not an Extended (or can't be converted to an Extended an
EConvertError exception will be raised (ignores sub stores). }
function ReadFloatInt(const Path: string; Default: Extended): Extended; virtual;
{ Stores an Extended value (ignores sub stores). }
procedure WriteFloatInt(const Path: string; Value: Extended); virtual;
{ Retrieves the specified string value. If the value is not found, the Default will be
returned. If the value is not a string (or can't be converted to a string an EConvertError
exception will be raised (ignores sub stores). }
function ReadStringInt(const Path: string; const Default: string): string; virtual;
{ Stores an string value (ignores sub stores). }
procedure WriteStringInt(const Path: string; const Value: string); virtual;
{ Retrieves the specified value into a buffer. The result holds the number of bytes actually
retrieved (ignores sub stores). }
function ReadBinaryInt(const Path: string; Buf: Pointer; BufSize: Integer): Integer; virtual;
{ Stores a buffer (ignores sub stores). }
procedure WriteBinaryInt(const Path: string; Buf: Pointer; BufSize: Integer); virtual;
{ Retrieves the specified TDateTime value. If the value is not found, the Default will be
returned. If the value is not a TDateTime (or can't be converted to an TDateTime an
EConvertError exception will be raised (ignores sub stores). }
function ReadDateTimeInt(const Path: string; Default: TDateTime): TDateTime; virtual;
{ Stores a TDateTime value (ignores sub stores). }
procedure WriteDateTimeInt(const Path: string; Value: TDateTime); virtual;
{ Retrieves the specified Boolean value. If the value is not found, the Default will be
returned. If the value is not a Boolean (or can't be converted to an Boolean an
EConvertError exception will be raised (ignores sub stores). }
function ReadBooleanInt(const Path: string; Default: Boolean): Boolean; virtual;
{ Stores a Boolean value (ignores sub stores). }
procedure WriteBooleanInt(const Path: string; Value: Boolean); virtual;
{ Retrieves an enumeration. If the value is not found, the Default will be returned (ignores sub
stores). }
procedure ReadEnumerationInt(const Path: string; TypeInfo: PTypeInfo; const Default;
out Value); virtual;
{ Stores an enumeration (ignores sub stores). }
procedure WriteEnumerationInt(const Path: string; TypeInfo: PTypeInfo; const Value); virtual;
{ Retrieves a set. If the value is not found, the Default will be returned (ignores sub
stores). }
procedure ReadSetInt(const Path: string; ATypeInfo: PTypeInfo; const Default; out Value); virtual;
{ Stores a set (ignores sub stores). }
procedure WriteSetInt(const Path: string; ATypeInfo: PTypeInfo; const Value); virtual;
function EncryptPropertyValue(Value: string): string;
function DecryptPropertyValue(Value: string): string;
procedure SetReadOnly(Value: Boolean);
function GetReadOnly: Boolean;
function GetPhysicalReadOnly: Boolean; virtual;
property SubStorages: TJvAppSubStorages read FSubStorages write SetSubStorages;
procedure Loaded; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
// (p3) moved Flush, Reload and AutoFlush to the base storage because users
// should be able to call Flush and Reload as needed without being dependant on whether
// the spcific storage implements it or not. Also made them virtual - if Flush and Reload
// doesn't make sense for a specific storage, it shouldn't have to implement them
procedure Flush; virtual;
procedure Reload; virtual;
procedure BeginUpdate;
procedure EndUpdate;
property IsUpdating: Boolean read GetUpdating;
property AutoFlush: Boolean read FAutoFlush write FAutoFlush default False;
property AutoReload: Boolean read FAutoReload write FAutoReload default False;
class function ConcatPaths(const Paths: array of string): string;
{ Resolve a path to it's actual used storage backend and root path. }
procedure ResolvePath(const InPath: string; out TargetStore: TJvCustomAppStorage; out TargetPath: string);
{ Determines if the path represents a folder }
function IsFolder(const Path: string; ListIsValue: Boolean = True): Boolean;
{ Determines if the specified path exists }
function PathExists(const Path: string): Boolean;
{ Determines if the specified value is stored }
function ValueStored(const Path: string): Boolean;
{ Determines if the specified list is stored }
function ListStored(const Path: string): Boolean;
{ Deletes the specified value. If the value wasn't stored, nothing will happen. }
procedure DeleteValue(const Path: string);
{ Deletes all values and sub folders of the specified folder including the folder itself. }
procedure DeleteSubTree(const Path: string);
{ Retrieves the specified Integer value. If the value is not found, the Default will be
returned. If the value is not an Integer (or can't be converted to an Integer an EConvertError
exception will be raised. }
function ReadInteger(const Path: string; Default: Integer = 0): Integer;
{ Stores an Integer value. }
procedure WriteInteger(const Path: string; Value: Integer);
{ Retrieves the specified Extended value. If the value is not found, the Default will be
returned. If the value is not an Extended (or can't be converted to an Extended an
EConvertError exception will be raised.}
function ReadFloat(const Path: string; Default: Extended = 0): Extended;
{ Stores an Extended value. }
procedure WriteFloat(const Path: string; Value: Extended);
{ Retrieves the specified string value. If the value is not found, the Default will be
returned. If the value is not a string (or can't be converted to a string an EConvertError
exception will be raised. }
function ReadString(const Path: string; const Default: string = ''): string;
{ Stores an string value. }
procedure WriteString(const Path: string; const Value: string);
{ Retrieves the specified TDateTime value. If the value is not found, the Default will be
returned. If the value is not a TDateTime (or can't be converted to an TDateTime an
EConvertError exception will be raised. }
function ReadDateTime(const Path: string; Default: TDateTime = 0): TDateTime;
{ Stores a TDateTime value. }
procedure WriteDateTime(const Path: string; Value: TDateTime);
{ Retrieves the specified value into a buffer. The result holds the number of bytes actually
retrieved. }
function ReadBinary(const Path: string; Buf: Pointer; BufSize: Integer): Integer;
{ Stores a buffer. }
procedure WriteBinary(const Path: string; Buf: Pointer; BufSize: Integer);
{ Retrieves the specified list. Caller provides a callback method that will read the individual
items. ReadList will first determine the number of items to read and calls the specified
method for each item. }
function ReadList(const Path: string;
const List: TObject; const OnReadItem: TJvAppStorageListItemEvent;
const ItemName: string = cItem): Integer;
{ Stores a list of items. The number of items is stored first. For each item the provided
item write method is called. Any additional items in the list (from a previous write) will be
removed by the optionally provided delete method. }
procedure WriteList(const Path: string; const List: TObject; const ItemCount: Integer;
const OnWriteItem: TJvAppStorageListItemEvent;
const OnDeleteItems: TJvAppStorageListDeleteEvent = nil;
const ItemName: string = cItem);
{ Retrieves a list of objects. The list is optionally cleared before before reading starts.
The ObjectType of the Object is retrieved from the stored "Classname" value.
The result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadObjectList(const Path: string; List: TList;
const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer; overload;
{ Retrieves a list of objects. The list is optionally cleared before before reading starts.
The ObjectType of the Object is defined by the ItemCreator-Event.
The result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadObjectList(const Path: string; List: TList;
ItemCreator: TJvAppStorageObjectListItemCreateEvent;
const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer; overload;
{ Stores a list of objects. Uses WriteList with internally provided methods to do the actual
storing. }
procedure WriteObjectList(const Path: string; List: TList; const ItemName: string = cItem);
{ Retrieves a list of collection items . The list is optionally cleared before before reading starts.
The result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadCollection(const Path: string; List: TCollection;
const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer;
{ Stores all items of a collection. Uses WriteList with internally provided methods to do the actual
storing. }
procedure WriteCollection(const Path: string; List: TCollection; const ItemName: string = cItem);
{ Retrieves a string list with addition objects.
The ObjectType of the Object is retrieved from the stored "Classname" value.
The string list is optionally cleared before reading starts. The
result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadStringObjectList(const Path: string; const SL: TStrings;
const ClearFirst: Boolean = True;
const ItemName: string = cItem): Integer; overload;
{ Retrieves a string list with addition objects.
The ObjectType of the Object is defined by the ItemCreator-Event.
The string list is optionally cleared before reading starts. The
result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadStringObjectList(const Path: string; const SL: TStrings;
ItemCreator: TJvAppStorageObjectListItemCreateEvent;
const ClearFirst: Boolean = True;
const ItemName: string = cItem): Integer; overload;
{ Stores and also the attached object informations of a string list.
Uses WriteList with internally provided methods to do the actual
storing. }
procedure WriteStringObjectList(const Path: string; const SL: TStrings; const ItemName: string = cItem);
{ Retrieves a string list. The string list is optionally cleared before reading starts. The
result value is the number of items read. Uses ReadList with internally provided methods to
do the actual reading. }
function ReadStringList(const Path: string; const SL: TStrings;
const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer;
{ Stores a string list. Uses WriteList with internally provided methods to do the actual
storing. }
procedure WriteStringList(const Path: string; const SL: TStrings; const ItemName: string = cItem);
{ Retrieves an enumeration. If the value is not found, the Default will be returned. }
procedure ReadEnumeration(const Path: string; TypeInfo: PTypeInfo;
const Default; out Value);
{ Stores an enumeration }
procedure WriteEnumeration(const Path: string; TypeInfo: PTypeInfo;
const Value);
procedure ReadSet(const Path: string; ATypeInfo: PTypeInfo; const Default; out Value);
{ Stores a set. }
procedure WriteSet(const Path: string; ATypeInfo: PTypeInfo; const Value);
{ Retrieves the specified Boolean value. If the value is not found, the Default will be
returned. If the value is not an Boolean (or can't be converted to a Boolean an EConvertError
exception will be raised. }
function ReadBoolean(const Path: string; Default: Boolean = True): Boolean;
{ Stores an Boolean value
The value is stored as string TRUE/FALSE. }
procedure WriteBoolean(const Path: string; Value: Boolean);
{ Retrieves an Property. If the value is not found, the Property is not changed. }
procedure ReadProperty(const Path: string; const PersObj: TPersistent;
const PropName: string; const Recursive, ClearFirst: Boolean);
{ Stores an Property }
procedure WriteProperty(const Path: string; const PersObj: TPersistent;
const PropName: string; const Recursive: Boolean);
{ Retrieves a set. If the value is not found, the Default will be returned. }
{ Retrieves a TPersistent-Object with all of its published properties }
procedure ReadPersistent(const Path: string; const PersObj: TPersistent;
const Recursive: Boolean = True; const ClearFirst: Boolean = True; const IgnoreProperties: TStrings = nil);
{ Stores a TPersistent-Object with all of its published properties}
procedure WritePersistent(const Path: string; const PersObj: TPersistent;
const Recursive: Boolean = True; const IgnoreProperties: TStrings = nil);
{ Translates a Char value to a (valid) key name. Used by the set storage methods. }
function GetCharName(Ch: Char): string; virtual;
{ Translates an Integer value to a key name. Used by the set storage methods. }
function GetIntName(Value: Integer): string; virtual;
{ Translates between a property name and it's storage name. If Reading is True, AName is
interpreted as a storage name to be translated to a real property name. If Reading is False,
AName is interpreted as a property name to be translated to a storage name. Will invoke the
OnTranslatePropertyName event if one is assigned, or return AName if no handler is assigned. }
function TranslatePropertyName(Instance: TPersistent; const AName: string;
const Reading: Boolean): string;
{ Enumerate a list of stored values and/or folder below the specified path, optionally scanning
sub folders as well. The associated object is an integer specifying what the string
represents: 1: Folder; 2: Value; 3: Both }
procedure GetStoredValues(const Path: string; const Strings: TStrings;
const Options: TJvAppStorageEnumOptions = [aeoValues, aeoReportListAsValue, aeoRecursive]);
{ Enables the Cryption of Property-Values (Only String-Values) }
procedure EnablePropertyValueCrypt;
{ Disables the Cryption of Property-Values (Only String-Values) }
procedure DisablePropertyValueCrypt;
{ Returns the current state if Property-Value Cryption is enabled }
function IsPropertyValueCryptEnabled: Boolean;
{ Root of any values to be read/written. This value is combined with the path given in one of
the Read*/Write* methods to determine the actual key used. It's always relative to the value
of Root (which is an absolute path) }
property Path: string read GetPath write SetPath;
{ Defines if the Storage-Component is readonly or not.
If Readonly is true all Calls to an Write*-Procedure will be ignored.
The property is calulated by a combination of setting the
property ReadOnly and Result of the function GetPhysicalReadOnly }
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -