英雄联盟裁决之地:Variant的相关函数

来源:百度文库 编辑:九乡新闻网 时间:2024/03/29 19:09:32

Variant的相关函数(转) 

//SysUtils.Abort;  中断事务;


Problem:
=================
如: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,用上面的函数这样配合?  
  谢谢!


Answer:
=================
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;

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。
 
 

Variant的相关函数
2009-2-6 12:25:03 来源: 转载 作者:网络 访问:165 次 被顶:1 次 字号:【大 中 小】
核心提示:Variant的相关函数...1.VarArrayCreate()和VarArrayOf()这两个常用就不说了
2.VarArrayRedim()函数能修改variant数组的最高限。
3.VarArrayDimCount()函数返回Variant数组的维数,
4.VarArrayLowBound()和VarArrayHighBound()函数分别返回Variant数组的下边界和上边界。
5.VarArrayLock()和VarArrayUnlock()一般用于初始化一个大数组。
如:
它创建一个有10000字节的Variant数组。假定有另一个相同长度的非Variant类型的数组,并且想
把非variant类型的数组复制到variant类型的数组中去。通常这都是通过用循环语句对variant数组
的单元进行赋值实现的。示例如下:
begin
v:=VarArrayCreate([1,10000],varBate);
fori:=1to10000do
v[i]:=a[i];
end;
上面这段代码的主要问题在于,大量的时间花费在对Variant数组的初始化上,因为在对每一个元
素进行赋值时,都要通过运行时逻辑来检查并判断数据类型的兼容性、每个元素的位置等等。为了避
免运行时检查,要用VarArrayLock()函数和VarArrayUnlock()过程。VarArrayLock()函数在内存中锁
定数组,使数组不再移动和改变大小,并能返回一个指向数组数据的指针。而VarArrayUnlock()过程
用来对VarArrayLock()函数锁定的数组进行解锁,使数组能重新移动或改变大小。在锁定数组后,能
用更有效的方法对数组进行初始化,例如用指向数组数据的指针调用Move()过程,下面的代码也对
Variant数组进行初始化,但它更有效:
begin
v:=VarArrayCreate([1,10000],varBate);
p:=VarArrayLock(v)
try
move(A,P^,10000);
finally
VarArrayUnlock(v);
end;
end;

6.VarArrayRef()获得variant指向的数据
7.VarIsArray()函数是一个简单的布尔检查函数,如果传递给它的参数是一个Variant数组则返回True,否则返回False.
8.VarClear()过程清除Variant变量并将VType域的值设为varEmpty.
9.VarCopy()将Source复制到Dest。
10.VarCast()将一个Variant转换成指定的类型并存储在另一个Variant变量中。
11.VarType()返回指定Variant的varXXX类型代码。
12.VarAsType()跟VarCast()的功能一样。
13.VarIsEmpty()如果一个Variant变量的类型代码是varEmpty则返回True。
14.VarIsNull()判断Variant变量是否包含null值。
15.VarToStr()将一个Variant变量转换成字符串表达式(如果Variant为varEmpty或varNUll则为空字符
串)。
16.VarFromDateTime()返回一个Variant变量,它存放着指定的TDateTime类型的值。
17.VarToDateTime()返回在Variant中的TDateTime类型的值。