2012-03-28 23 views
7

W moim rozwoju Delphi, chcę przekazać "tablicę stałych" (która może zawierać również klasę) do procedury, w pętli procedury na elementach i wykryć typ elementu jak poniżej.Jak uzyskać typy i wartości tablicy const?

Procedure Test(const Args : array of const); 
begin 
end; 

and in my code call it with some variables 

Procedure Test(); 
begin 
    cls := TMyObject.create; 
    i := 123; 
    j := 'book'; 
    l := False; 
    Test([i,j,l, cls, 37.8]) 
end; 

W jaki sposób zapętlić wysłane elementy tablicy i wykryć jego typ?

+0

Google jest twoim przyjacielem, http://blogs.embarcadero.com/abauer/2007/ 06/01/35293 – Dampsquid

+0

Proszę podać wersję delphi! –

+4

Jaka jest różnica między tym, jaka jest możliwa odpowiedź, @Warren? TVarRec przez lata niewiele się zmienił. –

Odpowiedz

7
for I := Low(Args) to High(Args) do 
    case TVarRec(Args[I]).VType of 
    vtInteger: 
     ... 
    end; 
+0

Dzięki, dostałem odpowiedź, Tarvirdi –

17

Zakładając, że używasz Delphi Unicode (w przeciwnym razie trzeba zmienić ciąg znaków):

procedure test(const args: array of const); 
var 
    i: Integer; 
begin 
    for i := low(args) to high(args) do 
    case args[i].VType of 
     vtInteger: ShowMessage(IntToStr(args[i].VInteger)); 
     vtUnicodeString: ShowMessage(string(args[i].VUnicodeString)); 
     vtBoolean: ShowMessage(BoolToStr(args[i].VBoolean, true)); 
     vtExtended: ShowMessage(FloatToStr(args[i].VExtended^)); 
     vtObject: ShowMessage(TForm(args[i].VObject).Caption); 
     // and so on 
    end; 
end; 


procedure TForm4.FormCreate(Sender: TObject); 
begin 
    test(['alpha', 5, true, Pi, Self]); 
end; 
Powiązane problemy