var  A: Variant;
begin
  A := VarArrayCreate([0, 4], varVariant);
  A[0] := 1;
  A[1] := 1234.5678;
  A[2] := 'Hello world';
  A[3] := True;
  A[4] := VarArrayOf([1, 10, 100, 1000]);
  WriteLn(A[2]); { Hello world }
  WriteLn(A[4][2]); { 100 }end;

解决方案 »

  1.   

    老兄倒是省事,整个给Copy+Paste过来。
    是建2维数组,不是一维的。
    类似:
    funtion Var2DArrayCreate(const b1,b2:array of integer;
                 vartype:integer)
      

  2.   

    自己写个函数吧,用Array of Array of (SomeType)
    数组范围用SetLength()指定。
    funtion Var2DArrayCreate(const bound1,bound2:array of integer;
                vartype:integer): Array of Array of (SomeType)
    如果函数能返回变类型的更好。
    有没有那位有空指点一下。写个源代码出来。
      

  3.   

    d5+w2k
    table,stringgridprocedure TForm1.BitBtn1Click(Sender: TObject);
    var
      vData: array of array of Variant;
      iFields,iRowCount,i,j:integer;
    begin
      iFields := tbl.FieldCount;
      iRowCount := tbl.RecordCount;
      stringgrid1.RowCount := iRowCount+1;
      stringgrid1.ColCount := iFields+1;
      SetLength(vData, iRowCount); // 设置第一维的长度
      // 根据第一维的长度进行循环
      tbl.first;
      tbl.Prior;
      for I := low(vData) to HIGH(vData) do
      begin
        tbl.Next;
        SetLength(vData[I], iFields); // 设置第二维的长度
        // 根据第二维的长度进行循环
        for J := 0 to iFields-1 do
        begin
          Vdata[i][j]:=tbl.Fields[j].AsVariant;
        end;
      end;  for i:= 0 to  iRowCount-1 do
      begin
        for j:=0 to iFields-1 do
        begin
          stringgrid1.Cells[j+1,i+1] := vdata[i][j];
        end;
      end;
    end;
      

  4.   

    哪里有那麼麻煩!
    vararraycreate([1,Row,1,col],varvariant)就可以了
      

  5.   

    看看VarArrayCreate函数的源程序吧!
      

  6.   

    我这个例子涉及了Variant数组主要知识
    //得到一个二维变体数组
    function TfrmVariantArray.GetArray: Variant;
    var
      V: Variant;
      I, J: integer;
    begin
      //建立多维用VarArrayCreate,一维可用VarArrayOf
      V := VarArrayCreate([0, 5, 0, 5], varInteger);
      for I := 0 to 5 do
        for J := 0 to 5 do
          V[I, J] := I * J;
      Result := V;
    end;//显示Variant数组的信息
    procedure TfrmVariantArray.ShowInfo(V: Variant);
    var
      I, DimCount: integer;
      strMsg: string;
    begin
      strMsg := '';
      //得到Variant数组的维数
      DimCount := VarArrayDimCount(V);
      strMsg := #13 + 'DimCount: ' + IntToStr(DimCount) + #13;
      for I := 1 to DimCount do
      begin
        //VarArrayHighBound(V,I)得到I维的上限
        strMsg := strMsg + 'HighBound: ' + IntToStr(VarArrayHighBound(V, I)) + #13;
        //VarArrayLowBound(V,I)得到I维的下限
        strMsg := strMsg + 'LowBound: ' + IntToStr(VarArrayLowBound(V, I)) + #13;
      end;
      ShowMessage(strMsg);
    end;procedure TfrmVariantArray.btnNormalArrayyClick(Sender: TObject);
    var
      I, J: integer;
      V: Variant;
    begin
      V := GetArray;
      ShowInfo(V);
      for I := VarArrayLowBound(V, 1) to VarArrayHighBound(V, 1) do
        for J := VarArrayLowBound(V, 2) to VarArrayHighBound(V, 2) do
          StringGrid1.Cells[I, J] := V[I, J];
          //可以直接赋值
    end;procedure TfrmVariantArray.btnLockedArrayClick(Sender: TObject);
    type
      TIntArray = array[0..5, 0..5] of integer;
    var
      V: Variant;
      I, J:integer;
      Data: ^TIntArray;
    begin
      V := GetArray;
      ClearGrid;
      //Variant数组是消耗相当数量的系统开销。若要迅速处理数组,可以使用两个函数:
      //VarArrayLock、VarArrayUnLock。VarArrayLock返回一个标准Pasacal数组
      //注意该数组必须用一个标准数组清楚进行申明,(Integer,Bool,String等)
      Data := VarArrayLock(V);
      for I := 0 to 5 do
        for J := 0 to 5 do
        begin
          StringGrid1.Cells[I, J] := IntToStr(Data[I, J]);
          Data[I, J]) := Data[I, J]) * 2;  
        end;
      //别忘了Unlock,否则要产生异常噢!
      VarArrayUnlock(V);
    end;最后没说得就是VarArrayRedim。用途吗?见名知其意...