LMS-2_ReportAPI/xpmemparammanagerunit.pas
Алексей Заблоцкий d6ad951e55 Первая версия
2023-10-18 22:41:44 +03:00

142 lines
3.1 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit xpMemParamManagerUnit;
interface
uses
Messages, SysUtils, Variants, Classes;
// xpConst;
const
sFRBreak = #13#10;
type
ParamRow = array[0..1] of Variant;
TParamArray = array of ParamRow;
{ TxpMemParamManager }
TxpMemParamManager = class(TObject)
private
ParamArray: TParamArray;
function GetValue(ParamName: Variant): Variant;
procedure SetValue(ParamName: Variant; const Value: Variant);
public
constructor Create;
destructor Destroy; override;
function IndexOf(const ParamName : string) : Integer;
function Count: Integer;
function ListAllParamsAndValues: string;
procedure Delete(ParamName: Variant);
property Params: TParamArray read ParamArray;
property Values[ParamName: Variant]: Variant read GetValue write SetValue; default;
procedure Assign(OwnerParam: TxpMemParamManager);
end;
implementation
uses
lazUTF8;
procedure TxpMemParamManager.Assign(OwnerParam: TxpMemParamManager);
var
i: Integer;
begin
if OwnerParam = nil then
Exit;
if Length(OwnerParam.ParamArray) > 0 then
for i:= Low(OwnerParam.ParamArray) to High(OwnerParam.ParamArray) do
Values[OwnerParam.ParamArray[i][0]] := OwnerParam.ParamArray[i][1]
end;
constructor TxpMemParamManager.Create;
begin
inherited Create;
ParamArray := nil;
end;
destructor TxpMemParamManager.Destroy;
begin
ParamArray := nil;
inherited;
end;
function TxpMemParamManager.GetValue(ParamName: Variant): Variant;
var
i: Integer;
begin
for i:= Low(ParamArray) to High(ParamArray) do
if AnsiSameText(ParamArray[i][0], ParamName) then
begin
Result := ParamArray[i][1];
Exit;
end;
raise Exception.Create('Не найден параметр ' + VarToStr(ParamName));
end;
function TxpMemParamManager.IndexOf(const ParamName: string): Integer;
var
i : Integer;
begin
Result := -1;
for i := Low(ParamArray) to High(ParamArray) do
begin
if AnsiSameText(ParamArray[i][0], ParamName) then
begin
Result := i;
Exit;
end;
end;
end;
function TxpMemParamManager.Count: Integer;
begin
result := High(ParamArray) + 1;
end;
function TxpMemParamManager.ListAllParamsAndValues: string;
var
i: integer;
begin
Result := '';
for i := 0 to (self.Count - 1) do
Result := Result + IntToStr(i) + ': '#39 + VarToStr(self.Params[i][0]) + #39' = '#39 + VarToStr(self.Params[i][1]) + #39'.' + sLineBreak;
end;
procedure TxpMemParamManager.SetValue(ParamName: Variant; const Value: Variant);
var
i,j: Integer;
strVal: string;
v: variant;
begin
if VarIsStr(Value) then
begin
v := utf8trim(Value);
end
else
v := Value;
for i:= Low(ParamArray) to High(ParamArray) do
if AnsiSameText(ParamArray[i][0], ParamName) then
begin
ParamArray[i][1] := v;
Exit;
end;
SetLength(ParamArray, Length(ParamArray) + 1);
ParamArray[High(ParamArray)][0] := ParamName;
ParamArray[High(ParamArray)][1] := v;
end;
procedure TxpMemParamManager.Delete(ParamName: Variant);
var
i: Integer;
begin
for i:= Low(ParamArray) to High(ParamArray) do
if AnsiSameText(ParamArray[i][0], ParamName) then
begin
ParamArray[i][0] := '';
Exit;
end;
end;
end.