Zitat von
mkinzler:
Man muss den Array im Aufruf der Funktion dynamisch erstellen (z.B. VarArrayOf())
Äh. Nein? Eine Routine mit einem 'Array Of Const'-Parameter kann man so aufrufen, wie bei der Format-Funktion. Nur eben der Zugriff ist nicht trivial. Warte mal, ich kram mal in meinem Archiv... *kram* *such*
Delphi-Quellcode:
Function ElementOfConst(aIndex: Integer; aArray: Array Of Const): Variant;
Begin
With aArray[aIndex] Do
Case VType Of
vtInteger:
Result := VInteger;
vtBoolean:
Result := vBoolean;
vtChar:
Result := VChar;
vtExtended:
Result := vExtended^;
vtString:
Result := VString^;
vtPChar:
Result := StrPas(VPChar);
vtObject:
Result := VObject.ClassName;
vtClass:
Result := VClass.ClassName;
vtAnsiString:
Result := String(VAnsiString);
vtCurrency:
Result := VCurrency^;
vtVariant:
Result := VVariant^;
vtInt64:
Result := VInt64^;
End;
End;
So kann ich auf die einzelnen Elemente eines 'Array Of Const' zugreifen, was eigentlich ein Array Of TVarRec ist (ähnlich aber nicht identisch mit TVarData, also einem Variant).
Ich kann dann also sowas spektakuläres bauen, wie z.B.:
Delphi-Quellcode:
Procedure ListItems (aArgs : Array Of Const);
Var
i : Integer;
Begin
For i:=0 to High (aArgs) do
Writeln (ElementOfConst(i,aArgs));
End;
...
ListItems (['Foo','Bar',1.2, 3.456, 7]);
Ob man das jemals benötigt, steht auf einem anderen Blatt.