TVarData(EnumValues[0]).VType = varArray + varVariant 是什末意思呢?(200分)

  • 主题发起人 主题发起人 wangyubai196412
  • 开始时间 开始时间
W

wangyubai196412

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrObject.AddEnumProperty(PropName: string; Enum: String;
const EnumValues: Array of Variant);
var
p: PfrPropRec;
vv: Variant;
begin
New(p);
p^.PropName := PropName;
p^.PropType := [frdtEnum];
p^.PropEditor := nil;
p^.Enum := TStringList.Create;
frSetCommaText(Enum, p^.Enum);

if TVarData(EnumValues[0]).VType = varArray + varVariant then
vv := EnumValues[0] else
vv := VarArrayOf(EnumValues);

if vv[0] = Null then
p^.EnumValues := Null else
p^.EnumValues := vv;
PropList.Add(p);
end;
请问高手:varArray + varVariant ?
 
EnumValues[0]的值是Array of Variant,就象下面EnumValues[0]:=EnumValues1;
看下面例子
var
EnumValues: Array of Variant;
EnumValues1: Array of Variant;
begin
setlength(EnumValues,10);
EnumValues[0]:=EnumValues1;
if TVarData(EnumValues[0]).VType = varArray + varVariant then
begin
self.Caption :='true' //程序走这里
end
else
self.Caption:='false'
end;
 
if TVarData(EnumValues[0]).VType = varArray + varVariant then
vv := EnumValues[0] else
vv := VarArrayOf(EnumValues);

EnumValues是一个变体数组,if TVarData(EnumValues[0]).VType = varArray + varVariant then 就是判断传入的这个变体数组是变体数组的数组还是普通variant变体数组,访问这个参数的0元素的vType,如果是varArray + varVariant (这两个是定义的常量),则说明参数的元素还是一个变体数组(前者),直接赋值给变体数组变量vv,如果不是,则用vararrayof创建成变体数组再赋给vv 使用.
 
转一下,更清楚
vartypeMask,Vararray ,Vararriant都是system.pas中的常量.

VarArray表示Variant包含的一个数组,VarByRef则表示Variant拥有的一个
数据指针,实际的数据不直接存在Variant中。
如果要想使某个数据类型存在于Variant中,可以这样:
VariantName:=VarType(VariantName) and VarTypeMask
VariantName是Variant变量名,VarType决定存储在Variant中的数据类型,它与and VarTypeMask组合。
例:
var Name: Variant
begin
Name:=’name’;
Name:=1688;
Name:=VarType(Name) and VarTypeMask;
 
如果要想使某个数据类型存在于Variant中,可以这样:
VariantName:=VarType(VariantName) and VarTypeMask
VarTypeMask???
 
VarTypeMask???
 
VarTypeMask 用来验证某个数据类型是否存在于Variant中 时跟vtType与运算的系统定义的常量掩码,看看他的定义值就明白了.
 
后退
顶部