[fpc-pascal] property of an array

dmitry boyarintsev skalogryz.lists at gmail.com
Sun Jan 4 22:07:36 CET 2009

   StringArray : array of String;

defines a StringArray type to be dynamic array.
are you sure, that you have SetColumnNames defined as
procedure SetColumnNames(names : StringArray);
rather than:
procedure SetColumnNames(names : array of string);

because if you have
procedure SetColumnNames(names : StringArray);
you cannot pass array in the following way

because: ['1','2','3'] is an open array, while SetColumnNames requires
a dynamic array to be passed.

btw, there's no way to define open-array type. Open arrays can be
passed only as a parameters.

if you have dynamic array type declared you CAN use it as a property

   StringArray : array of String;

  fNames : StringArray;
  procedure SetColumnNames(ANames: StringArray);

  property ColumnNames : StringArray read fNames write SetColumnNames

.. So if you want to assign a value to the ColumnNames property, you
can do it, only by generating a dynamic array first:
// the function generates a StringArray from Open String Array!
function MakeStringArray(const Strs: array of string): StringArray;
  i : integer;
  SetLength(Result, length(strs));
  for i := 0 to length(strs) - 1 do
    Result[i] := strs[i];
// compiles and works nicely and effectevely
// glory to FreePascal (and originally delphi 7 introducing open arrays)
myobj.Names := MakeStringArray(['1','2','3','4','5']);

3) You must understand the difference between dynamic array types and
open-arrays parameters

More information about the fpc-pascal mailing list