How to declare an array property in Delphi?

I am trying to create an array to store each element of TStringList into an array, the size of which may vary depending on the number of elements in the specified TStringList.

I know that my syntax is incorrect, and I probably want a dynamic array, so [0..100] is probably wrong, but I could not find an alternative syntax on the Internet.

ProductAvailabilityResult = Class(TRemotable)
private
  FResultArray : array[1..100] of string;
published
  property ResultArray[Index: Integer]: array of string read FResultArray write FResultArray;
End;

And this is how I will refer to it and fill it. conditionList is my TStringList that I would populate in my array.

for I := 0 to conditionList.Count - 1 do
begin
  aProductAvailabilityResult.ResultArray[I] := conditionList[I];
end;

, , , - SOAP-, , PHP/Soap TStringLists, .

, !

+4
2

. , , . .

:

type
  ProductAvailabilityResult = class(TRemotable)
  private
    FResultArray: TArray<string>;
  published
    property ResultArray: TArray<string> read FResultArray write FResultArray;
  end;

:

var
  i: Integer;
  List: TStringList;
  par: ProductAvailabilityResult;
  arr: TArray<string>;
....
List := ...;
par := ...;
SetLength(arr, List.Count);
for i := 0 to List.Count-1 do
  arr[i] := List[i];
par.ResultArray := arr;
+2

, getter/setter , published:

type
  ProductAvailabilityResult = class(TRemotable)
  private
    FResultArray : array of string;
    function GetResultArray(Index: Integer): string;
    function GetResultArrayCount: Integer;
    procedure SetResultArray(Index: Integer; const Value: string);
    procedure SetResultArrayCount(Value: Integer);
  public
    property ResultArray[Index: Integer]: string read GetResultArray write SetResultArray default;
    property ResultArrayCount: Integer read GetResultArrayCount write SetResultArrayCount;
  end;

function ProductAvailabilityResult.GetResultArray(Index: Integer): string;
begin
  Result := FResultArray[Index];
end;

function ProductAvailabilityResult.GetResultArrayCount: Integer;
begin
  Result := Length(FResultArray);
end;

procedure ProductAvailabilityResult.SetResultArray(Index: Integer; const Value: string);
begin
  FResultArray[Index] := Value;
end;

procedure ProductAvailabilityResult.SetResultArrayCount(Value: Integer);
begin
  SetLength(FResultArray, Value);
end;

:

aProductAvailabilityResult.ResultArrayCount := conditionList.Count;
for I := 0 to conditionList.Count - 1 do
begin
  aProductAvailabilityResult[I] := conditionList[I];
end;

, TStrings:

type
  ProductAvailabilityResult = class(TRemotable)
  private
    ...
  public
    procedure AssignStrings(AStrings: TStrings);
    ...
  end;

procedure ProductAvailabilityResult.AssignStrings(AStrings: TStrings);
var
  I: Integer;
begin
  SetLength(FResultArray, AStrings.Count);
  for I := 0 to AStrings.Count - 1 do
    FResultArray[I] := AStrings[I];
end;

aProductAvailabilityResult.AssignStrings(conditionList);
+4

Source: https://habr.com/ru/post/1661740/


All Articles