Delphi не поддерживает наборы символов Unicode. Вы можете использовать AnsiChar только в наборе, но этого недостаточно для размещения всех возможных символов, которые может содержать ваша строка.
Вместо собственного типа набора Delphi вы можете использовать тип TBits
.
procedure aFunc;
var
CharacterSet: TBits;
s: String;
c: Char;
CaseSensitive: Boolean;
begin
// Other code that assign a string to s
// Set CaseSensitive to a value
CharacterSet := TBits.Create;
try
for c in s do begin
CharacterSet[Ord(c)] := True;
if not CaseSensitive then begin
CharacterSet[Ord(Character.ToUpper(c))] := True;
CharacterSet[Ord(Character.ToLower(c))] := True;
end
end;
finally
CharacterSet.Free;
end;
end;
Объект TBits
автоматически расширяется, чтобы вместить самый высокий бит, который он должен представлять.
Другие изменения, которые я внес в ваш код, включают использование нового стиля цикла "for-in" и нового символа для работы с символами Юникода.