如:A:=VarArrayCreate([0,4],VarVariant);
    A[0]:=1;
    A[1]:='ABC';
    A[2]:=3;
    A[3]:=VarArrayof([1,2,3,4,5]);
如果要取出A[3]中的各个具体的值A[3][0]=1,用上面的函数这样配合?
谢谢!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
      S: string;
      A: Variant;
      B: Variant;
    begin
      A:=VarArrayCreate([0,4],VarVariant);
      A[0]:=1;
      A[1]:='ABC';
      A[2]:=3;
      A[3]:=VarArrayof([1,2,3,4,5]);
      //取A[3]的高低限并循环,VarArray*Boud的第二个参数,代表A[3]的维数.
      for I := VarArrayLowBound(A[3], 1) to VarArrayHighBound(A[3], 1) do
      begin
        B := A[3][I];
        S := S + VarToStr(B) + ', ';
      end;
      Edit1.Text := S;
    end;
      

  2.   

    VarArrayOf是一种快速(写代码快而不是运行快)的方法生成一个一维Variant数据的方法,它接受一个Variant类型的Open array,用这个数据生成一个一维的Variant Array of Variant(类型为Variant)。由于Delphi对Open Array类型参数的支持,使你可以用一行语句生成一个数组。不过它有两个缺陷:只能生成一维数组;只能生成元素类型是Variant的数组。其它的数组只能用VarArrayCreate去创建,并用循环给元素赋值。
    VarArrayHighBound和VarArrayLowBound是取Variant Array指定维(从1开始)的上、下界。
    如:
    var
      a, b: Variant;
      I, J, K, M: Integer;
    begin
      a := VarArrayOf([1234, 'abc', Null]);//a是个一维Variant数组,元素类型是Variant,元素个数是3,上界是2,下界是0。
      b := VarArrayCreate[0, 3, 1, 16], varOleStr)//b是一个16行4列的二维数组(注意,Variant数组下标是列在前,行在后),元素类型是PWideChar,最大列号是3,最小列号是0,最大行号是16,最小行号是1。
     I := VarArrayHighBound(b, 1)//I是b的最大列号:3;
      J := VarArrayLowBound(b, 1)//J是b的最小列号:0;
     K := VarArrayHighBound(b, 2)//K是b的最大行号:16;
     M := VarArrayLowBound(b, 2)//M是b的最小行号:1。