更改SetColumns
为采用const打开数组:
procedure SetColumns( vColumns : TVirtualTreeColumns; const vNames : array of string; const vWidths : array of integer); var i:integer; begin if Length(vNames) <> Length(vWidths) then raise Exception.Create('vNames and vWidth should have same number of elements!') else begin vColumns.Clear; for i := 0 to High(vNames) do with vColumns.Add do begin Text := vNames[i]; Width := vWidths[i]; end; end; end;
在数组周围添加括号使用Open Array构造函数:
SetColumns(VST.Header.Columns,['#','First name','Last name','Address'],[50,20,20,50]);
另一种替代方法(使用堆来分配数组):
SetColumns( VST.Header.Columns, TArray.Create('#','First name','Last name','Address'), TArray .Create(50,20,20,50));
圣诞节奖金更新
在评论中,OP询问如何以类似的方式在括号中传递记录数组.
步骤1:
声明一个静态类函数作为返回记录的记录的成员:
Type TMyRecord = record myName: string; myValue: integer; class function Init(const aName: String; aValue: Integer): TMyRecord; static; end; class function TMyRecord.Init(const aName: String; aValue: Integer): TMyRecord; begin Result.myName := aName; Result.myValue := aValue; end;
第2步:
SetValues2
使用静态初始化函数调用您的过程:
procedure SetValues2(const vArr: array of TMyRecord); begin ; end; SetValues2([TMyRecord.Init(' a ',1),TMyRecord.Init(' b ',2),TMyRecord.Init(' c ',3)]);