procedure TForm1.getp(P: array of TVarRec; Args: array of const);
var i:integer;
begin
for I := Low(Args) to High (Args) do begin
p[i].VType:=args[i].VType;
case Args[I].VType of
vtInteger: p[i].VInteger :=Args[I].VInteger;
vtBoolean: p[i].VBoolean :=Args[i].VBoolean;
VtChar: p[i].VPchar :=Args[i].VPchar;
end; // case
end;
end;然后测试:
var
pp:array of TVarRec;
begin
getp(pp,[111,'str']);
showmessage(pp[1].VPChar);
showmessage(inttostr(pp[0].VInteger));
end;
为什么不行?
var i:integer;
begin
for I := Low(Args) to High (Args) do begin
p[i].VType:=args[i].VType;
case Args[I].VType of
vtInteger: p[i].VInteger :=Args[I].VInteger;
vtBoolean: p[i].VBoolean :=Args[i].VBoolean;
VtChar: p[i].VPchar :=Args[i].VPchar;
end; // case
end;
end;然后测试:
var
pp:array of TVarRec;
begin
getp(pp,[111,'str']);
showmessage(pp[1].VPChar);
showmessage(inttostr(pp[0].VInteger));
end;
为什么不行?
pp:array of TVarRec;
begin
getp(pp,[111,'str']);
showmessage(pp[1].VPChar); //取不到值'str'
showmessage(inttostr(pp[0].VInteger));//取不到值111
end;
getp(pp,[111,'str']);
showmessage(string(pp[1].VPChar));
showmessage(inttostr(pp[0].VInteger));
implementationtype
TATV = array of TVarRec;procedure getp(var P: TATV; Args: array of const);
var i:integer;
begin
Setlength(P, High(Args) + 1);
for I := Low(p) to High (p) do
begin
p[i].VType := args[i].VType;
case Args[I].VType of
vtInteger:
p[i].VInteger :=Args[I].VInteger;
vtBoolean:
p[i].VBoolean :=Args[i].VBoolean;
VtChar:
p[i].VPchar :=Args[i].VPchar;
vtString:
p[i].VString :=Args[i].VString;
vtAnsiString:
p[i].VAnsiString := Args[i].VAnsiString;
end; // case
end;
end;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
pp: TATV; //array of TVarRec;
n: integer;
begin
getp(pp, ['str', 111, 123, '222', 'qwe']);
for n := low(pp) to high(pp) do
case pp[n].VType of
vtInteger:
ShowMessage(IntToStr(pp[n].VInteger));
vtBoolean:
;//pp[i].VBoolean;
VtChar, vtString, vtAnsiString:
ShowMessage(pp[n].VPchar);
end; // case
end;
var i:integer;
begin
Setlength(P, High(Args) + 1);
for I := Low(p) to High (p) do
p[i] := Args[i];
end;