Leslyn Fernandes wrote:
> Desculpa alongar ainda mais o assunto,

Lista é pra isso mesmo.

> mas como funciona esse "array of
> const"? como é a declaração, e onde eu obtenho mais informações sobre o uso?

Veja a declaração da função Format (como um exemplo) e veja o tipo 
TVarRec (no qual um array of const é convertido em tempo de compilação). 
Abaixo vai uma função que criei para passar um array of variant para a 
função Format:

function VarFormat(
   const AFormat: string; const AArgs: array of Variant): string;
var
   VConsts: array of TVarRec;
   VExtended: Extended;
{$ifdef fpc}
   VInt64: Int64;
{$endif}
   I: Integer;
begin
   SetLength(VConsts, Length(AArgs));
   for I := 0 to Pred(Length(AArgs)) do
     case TVarData(AArgs[I]).VType of
       varSmallint: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VSmallint;
       end;
       varInteger: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VInteger;
       end;
       varSingle: begin
         VExtended := TVarData(AArgs[I]).VSingle;
         VConsts[I].VType := vtExtended;
         VConsts[I].VExtended := @VExtended;
       end;
       varDouble: begin
         VExtended := TVarData(AArgs[I]).VDouble;
         VConsts[I].VType := vtExtended;
         VConsts[I].VExtended := @VExtended;
       end;
       varCurrency: begin
         VConsts[I].VType := vtCurrency;
         VConsts[I].VCurrency := @TVarData(AArgs[I]).VCurrency;
       end;
       varDate: begin
         VExtended := TVarData(AArgs[I]).VDate;
         VConsts[I].VType := vtExtended;
         VConsts[I].VExtended := @VExtended;
       end;
       varBoolean: begin
         VConsts[I].VType := vtBoolean;
         VConsts[I].VBoolean := TVarData(AArgs[I]).VBoolean;
       end;
       varByte: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VByte;
       end;
       varString: begin
         VConsts[I].VType := vtAnsiString;
         VConsts[I].VAnsiString := TVarData(AArgs[I]).VString;
       end;
{$ifndef d5down}
       varShortInt: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VShortInt;
       end;
       varWord: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VWord;
       end;
       varLongWord: begin
         VConsts[I].VType := vtInteger;
         VConsts[I].VInteger := TVarData(AArgs[I]).VLongWord;
       end;
       varInt64: begin
         VConsts[I].VType := vtInt64;
         VConsts[I].VInt64 := @TVarData(AArgs[I]).VInt64;
       end;
{$endif}
{$ifdef fpc}
       varQWord: begin
         VInt64 := TVarData(AArgs[I]).VQWord;
         VConsts[I].VType := vtInt64;
         VConsts[I].VInt64 := @VInt64;
       end;
{$endif}
       else raise EPressError.Create(SUnsupportedVariantType);
     end;
   Result := Format(AFormat, VConsts);
end;

Responder a