Es gibt eine Reihe von Vorschlägen, wie man in Delphi case mit Strings verwenden kann. Hier ein Vorschlag von mir:

 Ich verwende eine Funktion StrCase mit einem Übergabeparamter vom Typ open string array. Die Funktion testet einen ebenfalls übergebenen String (den Selektor) gegen jeden Wert in der Liste und gibt die gefundene Position (0 bis Anzahl - 1) als Funktionswert zurück. Falls die Funktion keine Übereinstimmung findet, ist das Ergebnis -1.

function StrCase(Selector: string; StrList: array of string): Integer;
var
  I: Integer;

begin
  Result := -1;
  for I := 0 to High(StrList) do begin
    if Selector = StrList[I] then begin
      Result := I;
      break;
    end;
  end;
end;

 Jetzt kann man die Funktion StrCase anstelle des case-Selektors verwenden und erhält somit eine einfache Konstruktion:

procedure TestString(StringToTest: string);
begin
  case StrCase(StringToTest, ['Eins', 'Zwei', 'Drei']) of
    0: ShowMessage('1: ' + s);
    1: ShowMessage('2: ' + s);
    2: ShowMessage('3: ' + s);
  else
    ShowMessage('else: ' + s);
  end;
end;

 Das ist bereits alles. Der Vorteil dieser Funktion besteht darin, dass für alle ”String-Case”-Anwendungen eine Funktion zur Verfügung steht, die keine zusätzliche Typkonvertierung oder andere Gemeinheiten erfordert.