Du kan ikke bruge enum hvis det skal være runtime.
Her er et eksempel kopieret fra 
www.undo.com:<---
I like to add an elegant, simplified and delphi independent :) solution to the \'Using CASE With Strings\' issue. 
My solution is the function TokenNumber... 
function TokenNumber(Source : string; const Delimeter, Token : string) : integer;
Here is an example of use... 
           {s = ?} 
           case TokenNumber(\'CASE;ON;STRINGS;POSSIBLE;SOLUTION\', \';\', s) of 
             1 : ShowMessage(\'s = \'\'CASE\'\'\'); 
             2 : ShowMessage(\'s = \'\'ON\'\'\'); 
             3 : ShowMessage(\'s = \'\'STRINGS\'\'\'); 
             4 : ShowMessage(\'s = \'\'POSSIBLE\'\'\'); 
             5 : ShowMessage(\'s = \'\'SOLUTION\'\'\'); 
             else 
               ShowMessage(\'s = unknown value\'); 
           end;
Here comes the source for function TokenNumber... 
function TokenNumber(Source : string; const Delimeter, Token : string) : integer; 
var 
  i : integer; 
begin 
  Result := 1; 
  while Result > 0 do {traverse through token\'s in Source} 
  begin 
    i := Pos(Delimeter, Source); 
    if ((i > 0) and (Token = Copy(Source, 1, i - 1))) or 
       ((i = 0) and (Token = Source)) then               {if match then      } 
      Break;                                             {  mission complete } 
    if i > 0 then                                  {if more tokens then      } 
      Delete(Source, 1, i + Length(Delimeter) - 1) {  cut \'no match\' token   } 
    else                                           {else                     } 
      Result := -1;                                {  mission complete       } 
    Inc(Result); 
  end; 
end;  
--->
Du kan også finde andre måder at gøre det på, på 
www.undo.com, men de minder meget om hinanden (se under Articles, tips & tricks)